Chromium Code Reviews| Index: android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc |
| diff --git a/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc b/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc |
| index 435ac1618e59e95e52a84d242f5d645d4c00226a..1c8b18af839795bdfdf1e0a3ddc70115b9e90242 100644 |
| --- a/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc |
| +++ b/android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.cc |
| @@ -12,6 +12,7 @@ |
| #include "android_webview/browser/aw_contents_io_thread_client.h" |
| #include "android_webview/browser/aw_login_delegate.h" |
| #include "android_webview/browser/aw_resource_context.h" |
| +#include "android_webview/browser/net/aw_web_resource_request.h" |
| #include "android_webview/browser/renderer_host/auto_login_parser.h" |
| #include "android_webview/common/url_constants.h" |
| #include "base/memory/scoped_vector.h" |
| @@ -32,6 +33,7 @@ |
| using android_webview::AwContentsIoThreadClient; |
| using android_webview::AwContentsClientBridgeBase; |
| +using android_webview::AwWebResourceRequest; |
| using content::BrowserThread; |
| using content::ResourceType; |
| using content::WebContents; |
| @@ -84,6 +86,20 @@ void NewLoginRequestOnUIThread( |
| client->NewLoginRequest(realm, account, args); |
| } |
| +void OnReceivedErrorOnUiThread( |
| + const content::ResourceRequestInfo::WebContentsGetter& web_contents_getter, |
| + AwWebResourceRequest* request, |
| + int error_code) { |
| + AwContentsClientBridgeBase* client = |
| + AwContentsClientBridgeBase::FromWebContentsGetter(web_contents_getter); |
| + if (!client) { |
| + DLOG(WARNING) << "io_client is null, onReceivedError dropped for " |
| + << request->url; |
| + return; |
| + } |
| + client->OnReceivedError(*request, error_code); |
| +} |
| + |
| } // namespace |
| namespace android_webview { |
| @@ -285,19 +301,18 @@ void AwResourceDispatcherHostDelegate::RequestComplete( |
| if (request && !request->status().is_success()) { |
| const content::ResourceRequestInfo* request_info = |
| content::ResourceRequestInfo::ForRequest(request); |
| - std::unique_ptr<AwContentsIoThreadClient> io_client = |
| - AwContentsIoThreadClient::FromID(request_info->GetChildID(), |
| - request_info->GetRenderFrameID()); |
| - if (io_client) { |
| - io_client->OnReceivedError(request); |
| - } else { |
| - DLOG(WARNING) << "io_client is null, onReceivedError dropped for " << |
| - request->url(); |
| - } |
| + |
| + std::unique_ptr<AwWebResourceRequest> web_request( |
| + new AwWebResourceRequest(request)); |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind(&OnReceivedErrorOnUiThread, |
| + request_info->GetWebContentsGetterForRequest(), |
| + base::Owned(web_request.release()), |
|
boliu
2016/12/08 05:48:38
ditto, use MakeUnique
sgurun-gerrit only
2016/12/08 21:56:46
stack allocated, copied
|
| + request->status().error())); |
| } |
| } |
| - |
| void AwResourceDispatcherHostDelegate::DownloadStarting( |
| net::URLRequest* request, |
| content::ResourceContext* resource_context, |