summaryrefslogtreecommitdiffstats
path: root/webkit/support/test_shell_request_context.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/support/test_shell_request_context.cc')
-rw-r--r--webkit/support/test_shell_request_context.cc140
1 files changed, 140 insertions, 0 deletions
diff --git a/webkit/support/test_shell_request_context.cc b/webkit/support/test_shell_request_context.cc
new file mode 100644
index 0000000..b7eadfc
--- /dev/null
+++ b/webkit/support/test_shell_request_context.cc
@@ -0,0 +1,140 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/support/test_shell_request_context.h"
+
+#include "base/compiler_specific.h"
+#include "base/files/file_path.h"
+#include "base/thread_task_runner_handle.h"
+#include "base/threading/worker_pool.h"
+#include "build/build_config.h"
+#include "net/base/cache_type.h"
+#include "net/cert/cert_verifier.h"
+#include "net/cookies/cookie_monster.h"
+#include "net/dns/host_resolver.h"
+#include "net/http/http_auth_handler_factory.h"
+#include "net/http/http_network_session.h"
+#include "net/http/http_server_properties_impl.h"
+#include "net/proxy/proxy_config_service.h"
+#include "net/proxy/proxy_config_service_fixed.h"
+#include "net/proxy/proxy_service.h"
+#include "net/ssl/default_server_bound_cert_store.h"
+#include "net/ssl/server_bound_cert_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/http_user_agent_settings.h"
+#include "net/url_request/url_request_job_factory_impl.h"
+#include "third_party/WebKit/public/platform/Platform.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h"
+#include "webkit/browser/blob/blob_storage_controller.h"
+#include "webkit/browser/blob/blob_url_request_job_factory.h"
+#include "webkit/browser/fileapi/file_system_context.h"
+#include "webkit/browser/fileapi/file_system_url_request_job_factory.h"
+#include "webkit/common/user_agent/user_agent.h"
+#include "webkit/support/simple_file_system.h"
+#include "webkit/support/simple_resource_loader_bridge.h"
+
+class TestShellHttpUserAgentSettings : public net::HttpUserAgentSettings {
+ public:
+ TestShellHttpUserAgentSettings() {}
+ virtual ~TestShellHttpUserAgentSettings() {}
+
+ // Hard-code Accept-Language for test shells.
+ virtual std::string GetAcceptLanguage() const OVERRIDE {
+ return "en-us,en";
+ }
+
+ virtual std::string GetUserAgent(const GURL& url) const OVERRIDE {
+ return webkit_glue::GetUserAgent(url);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestShellHttpUserAgentSettings);
+};
+
+TestShellRequestContext::TestShellRequestContext()
+ : storage_(this) {
+ Init(base::FilePath(), net::HttpCache::NORMAL, false);
+}
+
+TestShellRequestContext::TestShellRequestContext(
+ const base::FilePath& cache_path,
+ net::HttpCache::Mode cache_mode,
+ bool no_proxy)
+ : storage_(this) {
+ Init(cache_path, cache_mode, no_proxy);
+}
+
+void TestShellRequestContext::Init(
+ const base::FilePath& cache_path,
+ net::HttpCache::Mode cache_mode,
+ bool no_proxy) {
+ storage_.set_cookie_store(new net::CookieMonster(NULL, NULL));
+ storage_.set_server_bound_cert_service(new net::ServerBoundCertService(
+ new net::DefaultServerBoundCertStore(NULL),
+ base::WorkerPool::GetTaskRunner(true)));
+
+ storage_.set_http_user_agent_settings(new TestShellHttpUserAgentSettings);
+
+ // Use no proxy; it's not needed for testing and just breaks things.
+ scoped_ptr<net::ProxyConfigService> proxy_config_service(
+ new net::ProxyConfigServiceFixed(net::ProxyConfig()));
+
+ storage_.set_host_resolver(net::HostResolver::CreateDefaultResolver(NULL));
+ storage_.set_cert_verifier(net::CertVerifier::CreateDefault());
+ storage_.set_proxy_service(net::ProxyService::CreateUsingSystemProxyResolver(
+ proxy_config_service.release(), 0, NULL));
+ storage_.set_ssl_config_service(
+ new net::SSLConfigServiceDefaults);
+
+ storage_.set_http_auth_handler_factory(
+ net::HttpAuthHandlerFactory::CreateDefault(host_resolver()));
+ storage_.set_http_server_properties(
+ new net::HttpServerPropertiesImpl);
+
+ net::HttpCache::DefaultBackend* backend = new net::HttpCache::DefaultBackend(
+ cache_path.empty() ? net::MEMORY_CACHE : net::DISK_CACHE,
+ net::CACHE_BACKEND_DEFAULT, cache_path, 0,
+ SimpleResourceLoaderBridge::GetCacheThread());
+
+ net::HttpNetworkSession::Params network_session_params;
+ network_session_params.host_resolver = host_resolver();
+ network_session_params.cert_verifier = cert_verifier();
+ network_session_params.server_bound_cert_service =
+ server_bound_cert_service();
+ network_session_params.proxy_service = proxy_service();
+ network_session_params.ssl_config_service = ssl_config_service();
+ network_session_params.http_auth_handler_factory =
+ http_auth_handler_factory();
+ network_session_params.http_server_properties = http_server_properties();
+ network_session_params.host_resolver = host_resolver();
+
+ net::HttpCache* cache = new net::HttpCache(
+ network_session_params, backend);
+ cache->set_mode(cache_mode);
+ storage_.set_http_transaction_factory(cache);
+
+ blob_storage_controller_.reset(new webkit_blob::BlobStorageController());
+ file_system_context_ = static_cast<SimpleFileSystem*>(
+ WebKit::Platform::current()->fileSystem())->file_system_context();
+
+ net::URLRequestJobFactoryImpl* job_factory =
+ new net::URLRequestJobFactoryImpl();
+ job_factory->SetProtocolHandler(
+ "blob",
+ new webkit_blob::BlobProtocolHandler(
+ blob_storage_controller_.get(),
+ file_system_context_,
+ SimpleResourceLoaderBridge::GetIoThread()));
+ job_factory->SetProtocolHandler(
+ "filesystem",
+ fileapi::CreateFileSystemProtocolHandler(file_system_context_.get()));
+ job_factory->SetProtocolHandler("data", new net::DataProtocolHandler);
+ job_factory->SetProtocolHandler("file", new net::FileProtocolHandler);
+ storage_.set_job_factory(job_factory);
+}
+
+TestShellRequestContext::~TestShellRequestContext() {
+}