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 @@
#include "base/strings/sys_string_conversions.h"
#include "ios/web/public/browser_state.h"
#import "ios/web/public/download/download_controller_delegate.h"
#import "ios/web/public/web_client.h"
#import "net/base/mac/url_conversions.h"
#include "net/http/http_request_headers.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
......@@ -86,6 +88,13 @@ NSURLSession* DownloadControllerImpl::CreateSession(
NSOperationQueue* delegate_queue) {
NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration
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
delegate:delegate
delegateQueue:delegate_queue];
......
......@@ -12,8 +12,11 @@
#import "ios/web/public/navigation_manager.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/web_client.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/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
#include "net/url_request/url_fetcher_response_writer.h"
......@@ -35,10 +38,15 @@ const char kContent[] = "testdata";
std::unique_ptr<net::test_server::HttpResponse> GetDownloadResponse(
const net::test_server::HttpRequest& request) {
auto result = std::make_unique<net::test_server::BasicHttpResponse>();
result->set_code(net::HTTP_OK);
result->set_content(kContent);
result->AddCustomHeader("Content-Type", kMimeType);
result->AddCustomHeader("Content-Disposition", kContentDisposition);
std::string user_agent =
request.headers.at(net::HttpRequestHeaders::kUserAgent);
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;
}
......
......@@ -27,6 +27,7 @@ class TestWebClient : public web::WebClient {
void AddAdditionalSchemes(Schemes* schemes) const override;
// Returns true for kTestWebUIScheme and kTestNativeContentScheme URL schemes.
bool IsAppSpecificURL(const GURL& url) const override;
std::string GetUserAgent(UserAgentType type) const override;
base::RefCountedMemory* GetDataResourceBytes(int id) const override;
NSString* GetDocumentStartScriptForMainFrame(
BrowserState* browser_state) const override;
......
......@@ -31,6 +31,10 @@ bool TestWebClient::IsAppSpecificURL(const GURL& url) const {
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(
int resource_id) const {
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