diff options
author | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-07 15:05:29 +0000 |
---|---|---|
committer | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-07 15:05:29 +0000 |
commit | 02494ec2e31ee6f69898e560ab3f7812fbbda1cc (patch) | |
tree | f5e13d18320e36ac769dc861b82767bc206ef59e | |
parent | 182561f042ab34e010e498299b1e6354bc0a44e9 (diff) | |
download | chromium_src-02494ec2e31ee6f69898e560ab3f7812fbbda1cc.zip chromium_src-02494ec2e31ee6f69898e560ab3f7812fbbda1cc.tar.gz chromium_src-02494ec2e31ee6f69898e560ab3f7812fbbda1cc.tar.bz2 |
Make it so net/ can be built without file:// support.
This is a step towards making it possible to build net/
without ICU. ICU is used by directory_lister.cc, which
is used for creating file directory listings.
BUG=362608
R=mef@chromium.org
Review URL: https://codereview.chromium.org/253603004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@268766 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | build/common.gypi | 7 | ||||
-rw-r--r-- | net/BUILD.gn | 21 | ||||
-rw-r--r-- | net/net.gyp | 24 | ||||
-rw-r--r-- | net/proxy/proxy_script_fetcher_impl_unittest.cc | 12 | ||||
-rw-r--r-- | net/url_request/url_request_context_builder.cc | 19 | ||||
-rw-r--r-- | net/url_request/url_request_context_builder.h | 4 | ||||
-rw-r--r-- | net/url_request/url_request_unittest.cc | 32 |
7 files changed, 106 insertions, 13 deletions
diff --git a/build/common.gypi b/build/common.gypi index 16a4607..efb8063 100644 --- a/build/common.gypi +++ b/build/common.gypi @@ -482,6 +482,9 @@ # Enables used resource whitelist generation; disabled by default. 'enable_resource_whitelist_generation%': 0, + # Enable FILE support by default. + 'disable_file_support%': 0, + # Enable FTP support by default. 'disable_ftp_support%': 0, @@ -1044,6 +1047,7 @@ 'cld2_dynamic%': '<(cld2_dynamic)', 'cld2_is_component%': '<(cld2_is_component)', 'enable_captive_portal_detection%': '<(enable_captive_portal_detection)', + 'disable_file_support%': '<(disable_file_support)', 'disable_ftp_support%': '<(disable_ftp_support)', 'use_icu_alternatives_on_android%': '<(use_icu_alternatives_on_android)', 'enable_task_manager%': '<(enable_task_manager)', @@ -2623,6 +2627,9 @@ ['enable_settings_app==1', { 'defines': ['ENABLE_SETTINGS_APP=1'], }], + ['disable_file_support==1', { + 'defines': ['DISABLE_FILE_SUPPORT=1'], + }], ['disable_ftp_support==1', { 'defines': ['DISABLE_FTP_SUPPORT=1'], }], diff --git a/net/BUILD.gn b/net/BUILD.gn index 6ee299a..a6760e4 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn @@ -37,6 +37,11 @@ enable_websockets = !is_ios use_v8_in_net = false # TODO(brettw)!is_ios enable_built_in_dns = !is_ios +declare_args() {
+ # Disables support for file URLs. File URL support requires use of icu.
+ disable_file_support = false
+}
+ enable_ftp_support = !is_ios config("net_config") { @@ -44,6 +49,9 @@ config("net_config") { if (posix_avoid_mmap) { defines += [ "POSIX_AVOID_MMAP" ] } + if (disable_file_support) { + defines += [ "DISABLE_FILE_SUPPORT" ] + } } # Disables Windows warning about size to int truncations. @@ -108,6 +116,19 @@ component("net") { } } + if (disable_file_support) { + sources -= [ + "base/directory_lister.cc", + "base/directory_lister.h", + "url_request/url_request_file_dir_job.cc", + "url_request/url_request_file_dir_job.h", + "url_request/url_request_file_job.cc", + "url_request/url_request_file_job.h", + "url_request/file_protocol_handler.cc", + "url_request/file_protocol_handler.h", + ] + } + if (!enable_ftp_support) { sources -= [ "ftp/ftp_auth_cache.cc", diff --git a/net/net.gyp b/net/net.gyp index 3e176bd..205f74e 100644 --- a/net/net.gyp +++ b/net/net.gyp @@ -128,6 +128,24 @@ 'disk_cache/blockfile/mapped_file_avoid_mmap_posix.cc', ], }], + ['disable_file_support==1', { + # TODO(mmenke): Should probably get rid of the dependency on + # net_resources in this case (It's used in net_util, to format + # directory listings. Also used outside of net/). + 'dependencies!': [ + 'net_resources', + ], + 'sources!': [ + 'base/directory_lister.cc', + 'base/directory_lister.h', + 'url_request/url_request_file_dir_job.cc', + 'url_request/url_request_file_dir_job.h', + 'url_request/url_request_file_job.cc', + 'url_request/url_request_file_job.h', + 'url_request/file_protocol_handler.cc', + 'url_request/file_protocol_handler.h', + ], + }], ['disable_ftp_support==1', { 'sources/': [ ['exclude', '^ftp/'], @@ -595,6 +613,12 @@ ['exclude', '^spdy/spdy_websocket_stream_unittest\\.cc$'], ], }], + ['disable_file_support==1', { + 'sources!': [ + 'base/directory_lister_unittest.cc', + 'url_request/url_request_file_job_unittest.cc', + ], + }], [ 'disable_ftp_support==1', { 'sources/': [ ['exclude', '^ftp/'], diff --git a/net/proxy/proxy_script_fetcher_impl_unittest.cc b/net/proxy/proxy_script_fetcher_impl_unittest.cc index 53f7655..b902850 100644 --- a/net/proxy/proxy_script_fetcher_impl_unittest.cc +++ b/net/proxy/proxy_script_fetcher_impl_unittest.cc @@ -22,7 +22,6 @@ #include "net/http/transport_security_state.h" #include "net/ssl/ssl_config_service_defaults.h" #include "net/test/spawned_test_server/spawned_test_server.h" -#include "net/url_request/file_protocol_handler.h" #include "net/url_request/url_request_context_storage.h" #include "net/url_request/url_request_file_job.h" #include "net/url_request/url_request_job_factory_impl.h" @@ -30,6 +29,10 @@ #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" +#if !defined(DISABLE_FILE_SUPPORT) +#include "net/url_request/file_protocol_handler.h" +#endif + using base::ASCIIToUTF16; namespace net { @@ -48,7 +51,8 @@ struct FetchResult { base::string16 text; }; -// A non-mock URL request which can access http:// and file:// urls. +// A non-mock URL request which can access http:// and file:// urls, in the case +// the tests were built with file support. class RequestContext : public URLRequestContext { public: RequestContext() : storage_(this) { @@ -73,8 +77,10 @@ class RequestContext : public URLRequestContext { storage_.set_http_transaction_factory(new HttpCache( network_session.get(), HttpCache::DefaultBackend::InMemory(0))); URLRequestJobFactoryImpl* job_factory = new URLRequestJobFactoryImpl(); +#if !defined(DISABLE_FILE_SUPPORT) job_factory->SetProtocolHandler( "file", new FileProtocolHandler(base::MessageLoopProxy::current())); +#endif storage_.set_job_factory(job_factory); } @@ -199,6 +205,7 @@ class ProxyScriptFetcherImplTest : public PlatformTest { RequestContext context_; }; +#if !defined(DISABLE_FILE_SUPPORT) TEST_F(ProxyScriptFetcherImplTest, FileUrl) { ProxyScriptFetcherImpl pac_fetcher(&context_); @@ -221,6 +228,7 @@ TEST_F(ProxyScriptFetcherImplTest, FileUrl) { EXPECT_EQ(ASCIIToUTF16("-pac.txt-\n"), text); } } +#endif // !defined(DISABLE_FILE_SUPPORT) // Note that all mime types are allowed for PAC file, to be consistent // with other browsers. diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc index c0d0bb5..8314f32 100644 --- a/net/url_request/url_request_context_builder.cc +++ b/net/url_request/url_request_context_builder.cc @@ -28,13 +28,19 @@ #include "net/proxy/proxy_service.h" #include "net/ssl/ssl_config_service_defaults.h" #include "net/url_request/data_protocol_handler.h" -#include "net/url_request/file_protocol_handler.h" -#include "net/url_request/ftp_protocol_handler.h" #include "net/url_request/static_http_user_agent_settings.h" #include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_storage.h" #include "net/url_request/url_request_job_factory_impl.h" +#if !defined(DISABLE_FILE_SUPPORT) +#include "net/url_request/file_protocol_handler.h" +#endif + +#if !defined(DISABLE_FTP_SUPPORT) +#include "net/url_request/ftp_protocol_handler.h" +#endif + namespace net { namespace { @@ -187,7 +193,9 @@ URLRequestContextBuilder::SchemeFactory::~SchemeFactory() { URLRequestContextBuilder::URLRequestContextBuilder() : data_enabled_(false), +#if !defined(DISABLE_FILE_SUPPORT) file_enabled_(false), +#endif #if !defined(DISABLE_FTP_SUPPORT) ftp_enabled_(false), #endif @@ -313,11 +321,15 @@ URLRequestContext* URLRequestContextBuilder::Build() { URLRequestJobFactoryImpl* job_factory = new URLRequestJobFactoryImpl; if (data_enabled_) job_factory->SetProtocolHandler("data", new DataProtocolHandler); + +#if !defined(DISABLE_FILE_SUPPORT) if (file_enabled_) { job_factory->SetProtocolHandler( "file", new FileProtocolHandler(context->GetFileThread()->message_loop_proxy())); } +#endif // !defined(DISABLE_FILE_SUPPORT) + #if !defined(DISABLE_FTP_SUPPORT) if (ftp_enabled_) { ftp_transaction_factory_.reset( @@ -325,7 +337,8 @@ URLRequestContext* URLRequestContextBuilder::Build() { job_factory->SetProtocolHandler("ftp", new FtpProtocolHandler(ftp_transaction_factory_.get())); } -#endif +#endif // !defined(DISABLE_FTP_SUPPORT) + storage->set_job_factory(job_factory); // TODO(willchan): Support sdch. diff --git a/net/url_request/url_request_context_builder.h b/net/url_request/url_request_context_builder.h index 0f93f4a..41db45a 100644 --- a/net/url_request/url_request_context_builder.h +++ b/net/url_request/url_request_context_builder.h @@ -89,10 +89,12 @@ class NET_EXPORT URLRequestContextBuilder { data_enabled_ = enable; } +#if !defined(DISABLE_FILE_SUPPORT) // Control support for file:// requests. By default it's disabled. void set_file_enabled(bool enable) { file_enabled_ = enable; } +#endif #if !defined(DISABLE_FTP_SUPPORT) // Control support for ftp:// requests. By default it's disabled. @@ -157,8 +159,10 @@ class NET_EXPORT URLRequestContextBuilder { std::string user_agent_; // Include support for data:// requests. bool data_enabled_; +#if !defined(DISABLE_FILE_SUPPORT) // Include support for file:// requests. bool file_enabled_; +#endif #if !defined(DISABLE_FTP_SUPPORT) // Include support for ftp:// requests. bool ftp_enabled_; diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 97d3622..d209c5a 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc @@ -66,11 +66,8 @@ #include "net/test/cert_test_util.h" #include "net/test/spawned_test_server/spawned_test_server.h" #include "net/url_request/data_protocol_handler.h" -#include "net/url_request/file_protocol_handler.h" -#include "net/url_request/ftp_protocol_handler.h" #include "net/url_request/static_http_user_agent_settings.h" #include "net/url_request/url_request.h" -#include "net/url_request/url_request_file_dir_job.h" #include "net/url_request/url_request_http_job.h" #include "net/url_request/url_request_job_factory_impl.h" #include "net/url_request/url_request_redirect_job.h" @@ -79,6 +76,15 @@ #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" +#if !defined(DISABLE_FILE_SUPPORT) +#include "net/url_request/file_protocol_handler.h" +#include "net/url_request/url_request_file_dir_job.h" +#endif + +#if !defined(DISABLE_FTP_SUPPORT) +#include "net/url_request/ftp_protocol_handler.h" +#endif + #if defined(OS_WIN) #include "base/win/scoped_com_initializer.h" #include "base/win/scoped_comptr.h" @@ -598,8 +604,10 @@ class URLRequestTest : public PlatformTest { default_context_.set_network_delegate(&default_network_delegate_); default_context_.set_net_log(&net_log_); job_factory_.SetProtocolHandler("data", new DataProtocolHandler); +#if !defined(DISABLE_FILE_SUPPORT) job_factory_.SetProtocolHandler( "file", new FileProtocolHandler(base::MessageLoopProxy::current())); +#endif default_context_.set_job_factory(&job_factory_); default_context_.Init(); } @@ -5148,20 +5156,27 @@ TEST_F(URLRequestTestHTTP, ContentTypeNormalizationTest) { req.Cancel(); } -TEST_F(URLRequestTestHTTP, ProtocolHandlerAndFactoryRestrictRedirects) { +TEST_F(URLRequestTestHTTP, ProtocolHandlerAndFactoryRestrictDataRedirects) { // Test URLRequestJobFactory::ProtocolHandler::IsSafeRedirectTarget(). - GURL file_url("file:///foo.txt"); GURL data_url("data:,foo"); - FileProtocolHandler file_protocol_handler(base::MessageLoopProxy::current()); - EXPECT_FALSE(file_protocol_handler.IsSafeRedirectTarget(file_url)); DataProtocolHandler data_protocol_handler; EXPECT_FALSE(data_protocol_handler.IsSafeRedirectTarget(data_url)); // Test URLRequestJobFactoryImpl::IsSafeRedirectTarget(). - EXPECT_FALSE(job_factory_.IsSafeRedirectTarget(file_url)); EXPECT_FALSE(job_factory_.IsSafeRedirectTarget(data_url)); } +#if !defined(DISABLE_FILE_SUPPORT) +TEST_F(URLRequestTestHTTP, ProtocolHandlerAndFactoryRestrictFileRedirects) { + // Test URLRequestJobFactory::ProtocolHandler::IsSafeRedirectTarget(). + GURL file_url("file:///foo.txt"); + FileProtocolHandler file_protocol_handler(base::MessageLoopProxy::current()); + EXPECT_FALSE(file_protocol_handler.IsSafeRedirectTarget(file_url)); + + // Test URLRequestJobFactoryImpl::IsSafeRedirectTarget(). + EXPECT_FALSE(job_factory_.IsSafeRedirectTarget(file_url)); +} + TEST_F(URLRequestTestHTTP, RestrictFileRedirects) { ASSERT_TRUE(test_server_.Start()); @@ -5176,6 +5191,7 @@ TEST_F(URLRequestTestHTTP, RestrictFileRedirects) { EXPECT_EQ(URLRequestStatus::FAILED, req.status().status()); EXPECT_EQ(ERR_UNSAFE_REDIRECT, req.status().error()); } +#endif // !defined(DISABLE_FILE_SUPPORT) TEST_F(URLRequestTestHTTP, RestrictDataRedirects) { ASSERT_TRUE(test_server_.Start()); |