summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-07 15:05:29 +0000
committermmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-07 15:05:29 +0000
commit02494ec2e31ee6f69898e560ab3f7812fbbda1cc (patch)
treef5e13d18320e36ac769dc861b82767bc206ef59e
parent182561f042ab34e010e498299b1e6354bc0a44e9 (diff)
downloadchromium_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.gypi7
-rw-r--r--net/BUILD.gn21
-rw-r--r--net/net.gyp24
-rw-r--r--net/proxy/proxy_script_fetcher_impl_unittest.cc12
-rw-r--r--net/url_request/url_request_context_builder.cc19
-rw-r--r--net/url_request/url_request_context_builder.h4
-rw-r--r--net/url_request/url_request_unittest.cc32
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());