Commit 3955573a authored by Eugene But's avatar Eugene But Committed by Commit Bot

Use Chrome User Agent for download requests.

Some web sites return HTML page instead of PassKit object if request's
User Agent is not a known iOS browser.

Bug: 806759
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I566fe85eadb889dd715ddf858b07b6cef4a736c5
Reviewed-on: https://chromium-review.googlesource.com/891760Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Eugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#532893}
parent b3b8f6c1
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
#include "base/strings/sys_string_conversions.h" #include "base/strings/sys_string_conversions.h"
#include "ios/web/public/browser_state.h" #include "ios/web/public/browser_state.h"
#import "ios/web/public/download/download_controller_delegate.h" #import "ios/web/public/download/download_controller_delegate.h"
#import "ios/web/public/web_client.h"
#import "net/base/mac/url_conversions.h" #import "net/base/mac/url_conversions.h"
#include "net/http/http_request_headers.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
...@@ -86,6 +88,13 @@ NSURLSession* DownloadControllerImpl::CreateSession( ...@@ -86,6 +88,13 @@ NSURLSession* DownloadControllerImpl::CreateSession(
NSOperationQueue* delegate_queue) { NSOperationQueue* delegate_queue) {
NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration
backgroundSessionConfigurationWithIdentifier:identifier]; backgroundSessionConfigurationWithIdentifier:identifier];
std::string user_agent = GetWebClient()->GetUserAgent(UserAgentType::MOBILE);
configuration.HTTPAdditionalHeaders = @{
base::SysUTF8ToNSString(net::HttpRequestHeaders::kUserAgent) :
base::SysUTF8ToNSString(user_agent),
};
return [NSURLSession sessionWithConfiguration:configuration return [NSURLSession sessionWithConfiguration:configuration
delegate:delegate delegate:delegate
delegateQueue:delegate_queue]; delegateQueue:delegate_queue];
......
...@@ -12,8 +12,11 @@ ...@@ -12,8 +12,11 @@
#import "ios/web/public/navigation_manager.h" #import "ios/web/public/navigation_manager.h"
#include "ios/web/public/test/fakes/fake_download_controller_delegate.h" #include "ios/web/public/test/fakes/fake_download_controller_delegate.h"
#import "ios/web/public/test/web_test_with_web_state.h" #import "ios/web/public/test/web_test_with_web_state.h"
#import "ios/web/public/web_client.h"
#import "ios/web/public/web_state/web_state.h" #import "ios/web/public/web_state/web_state.h"
#include "net/http/http_request_headers.h"
#include "net/test/embedded_test_server/embedded_test_server.h" #include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h" #include "net/test/embedded_test_server/http_response.h"
#include "net/url_request/url_fetcher_response_writer.h" #include "net/url_request/url_fetcher_response_writer.h"
...@@ -35,10 +38,15 @@ const char kContent[] = "testdata"; ...@@ -35,10 +38,15 @@ const char kContent[] = "testdata";
std::unique_ptr<net::test_server::HttpResponse> GetDownloadResponse( std::unique_ptr<net::test_server::HttpResponse> GetDownloadResponse(
const net::test_server::HttpRequest& request) { const net::test_server::HttpRequest& request) {
auto result = std::make_unique<net::test_server::BasicHttpResponse>(); auto result = std::make_unique<net::test_server::BasicHttpResponse>();
result->set_code(net::HTTP_OK);
result->set_content(kContent); std::string user_agent =
result->AddCustomHeader("Content-Type", kMimeType); request.headers.at(net::HttpRequestHeaders::kUserAgent);
result->AddCustomHeader("Content-Disposition", kContentDisposition); if (user_agent == GetWebClient()->GetUserAgent(UserAgentType::MOBILE)) {
result->set_code(net::HTTP_OK);
result->set_content(kContent);
result->AddCustomHeader("Content-Type", kMimeType);
result->AddCustomHeader("Content-Disposition", kContentDisposition);
}
return result; return result;
} }
......
...@@ -27,6 +27,7 @@ class TestWebClient : public web::WebClient { ...@@ -27,6 +27,7 @@ class TestWebClient : public web::WebClient {
void AddAdditionalSchemes(Schemes* schemes) const override; void AddAdditionalSchemes(Schemes* schemes) const override;
// Returns true for kTestWebUIScheme and kTestNativeContentScheme URL schemes. // Returns true for kTestWebUIScheme and kTestNativeContentScheme URL schemes.
bool IsAppSpecificURL(const GURL& url) const override; bool IsAppSpecificURL(const GURL& url) const override;
std::string GetUserAgent(UserAgentType type) const override;
base::RefCountedMemory* GetDataResourceBytes(int id) const override; base::RefCountedMemory* GetDataResourceBytes(int id) const override;
NSString* GetDocumentStartScriptForMainFrame( NSString* GetDocumentStartScriptForMainFrame(
BrowserState* browser_state) const override; BrowserState* browser_state) const override;
......
...@@ -31,6 +31,10 @@ bool TestWebClient::IsAppSpecificURL(const GURL& url) const { ...@@ -31,6 +31,10 @@ bool TestWebClient::IsAppSpecificURL(const GURL& url) const {
url.SchemeIs(kTestNativeContentScheme); url.SchemeIs(kTestNativeContentScheme);
} }
std::string TestWebClient::GetUserAgent(UserAgentType type) const {
return "Chromium/66.0.3333.0 CFNetwork/893.14 Darwin/16.7.0";
}
base::RefCountedMemory* TestWebClient::GetDataResourceBytes( base::RefCountedMemory* TestWebClient::GetDataResourceBytes(
int resource_id) const { int resource_id) const {
if (!ui::ResourceBundle::HasSharedInstance()) if (!ui::ResourceBundle::HasSharedInstance())
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment