Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3949)

Unified Diff: chrome/browser/io_thread_unittest.cc

Issue 1414313002: Allow dynamic updating of authentication policies (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Respond to cbentzel@'s comments. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/io_thread.cc ('k') | chrome/browser/ui/login/login_prompt.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/io_thread_unittest.cc
diff --git a/chrome/browser/io_thread_unittest.cc b/chrome/browser/io_thread_unittest.cc
index ab59e6d786429a2c989ec562b835779f4b7c3b05..9ba5f482246354e87c9adc9614e9b8a4bdfa95e6 100644
--- a/chrome/browser/io_thread_unittest.cc
+++ b/chrome/browser/io_thread_unittest.cc
@@ -4,10 +4,22 @@
#include "base/command_line.h"
#include "base/metrics/field_trial.h"
+#include "base/prefs/pref_registry_simple.h"
+#include "base/prefs/pref_service.h"
+#include "base/prefs/testing_pref_service.h"
+#include "base/run_loop.h"
#include "base/test/mock_entropy_provider.h"
#include "chrome/browser/io_thread.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/pref_names.h"
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
+#include "components/policy/core/common/mock_policy_service.h"
+#include "components/proxy_config/pref_proxy_config_tracker_impl.h"
+#include "components/proxy_config/proxy_config_pref_names.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "net/http/http_auth_preferences.h"
+#include "net/http/http_auth_scheme.h"
#include "net/http/http_network_session.h"
#include "net/http/http_server_properties_impl.h"
#include "net/quic/quic_protocol.h"
@@ -15,10 +27,21 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+#if defined(ENABLE_EXTENSIONS)
+#include "chrome/browser/extensions/event_router_forwarder.h"
+#endif
+
+#if defined(OS_CHROMEOS)
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/network/network_handler.h"
+#endif
+
namespace test {
using ::testing::ElementsAre;
+using ::testing::ReturnRef;
+// Class used for accessing IOThread methods (friend of IOThread).
class IOThreadPeer {
public:
static void ConfigureQuicGlobals(
@@ -51,6 +74,14 @@ class IOThreadPeer {
net::HttpNetworkSession::Params* params) {
IOThread::InitializeNetworkSessionParamsFromGlobals(globals, params);
}
+
+ static void InitIOThread(IOThread* io_thread) { io_thread->Init(); }
+
+ static void CleanUpIOThread(IOThread* io_thread) { io_thread->CleanUp(); }
+
+ static net::HttpAuthPreferences* GetAuthPreferences(IOThread* io_thread) {
+ return io_thread->globals()->http_auth_preferences.get();
+ }
};
class IOThreadTest : public testing::Test {
@@ -535,4 +566,175 @@ TEST_F(IOThreadTest, QuicDisallowedByPolicy) {
EXPECT_FALSE(params.enable_quic);
}
+class IOThreadTestWithIOThreadObject : public testing::Test {
+ public:
+ // These functions need to be public, since it is difficult to bind to
+ // protected functions in a test (the code would need to explicitly contain
+ // the name of the actual test class).
+ void CheckCnameLookup(bool expected) {
+ auto http_auth_preferences =
+ IOThreadPeer::GetAuthPreferences(io_thread_.get());
+ ASSERT_NE(nullptr, http_auth_preferences);
+ EXPECT_EQ(expected, http_auth_preferences->NegotiateDisableCnameLookup());
+ }
+
+ void CheckNegotiateEnablePort(bool expected) {
+ auto http_auth_preferences =
+ IOThreadPeer::GetAuthPreferences(io_thread_.get());
+ ASSERT_NE(nullptr, http_auth_preferences);
+ EXPECT_EQ(expected, http_auth_preferences->NegotiateEnablePort());
+ }
+
+#if defined(OS_ANDROID)
+ void CheckAuthAndroidNegoitateAccountType(std::string expected) {
+ auto http_auth_preferences =
+ IOThreadPeer::GetAuthPreferences(io_thread_.get());
+ ASSERT_NE(nullptr, http_auth_preferences);
+ EXPECT_EQ(expected,
+ http_auth_preferences->AuthAndroidNegotiateAccountType());
+ }
+#endif
+
+ void CheckCanUseDefaultCredentials(bool expected, const GURL& url) {
+ auto http_auth_preferences =
+ IOThreadPeer::GetAuthPreferences(io_thread_.get());
+ EXPECT_EQ(expected, http_auth_preferences->CanUseDefaultCredentials(url));
+ }
+
+ void CheckCanDelegate(bool expected, const GURL& url) {
+ auto http_auth_preferences =
+ IOThreadPeer::GetAuthPreferences(io_thread_.get());
+ EXPECT_EQ(expected, http_auth_preferences->CanDelegate(url));
+ }
+
+ protected:
+ IOThreadTestWithIOThreadObject()
+ : thread_bundle_(content::TestBrowserThreadBundle::REAL_IO_THREAD) {
+#if defined(ENABLE_EXTENSIONS)
+ event_router_forwarder_ = new extensions::EventRouterForwarder;
+#endif
+ PrefRegistrySimple* pref_registry = pref_service_.registry();
+ IOThread::RegisterPrefs(pref_registry);
+ PrefProxyConfigTrackerImpl::RegisterPrefs(pref_registry);
+ ssl_config::SSLConfigServiceManager::RegisterPrefs(pref_registry);
+
+ // Set up default function behaviour.
+ EXPECT_CALL(policy_service_,
+ GetPolicies(policy::PolicyNamespace(
+ policy::POLICY_DOMAIN_CHROME, std::string())))
+ .WillRepeatedly(ReturnRef(policy_map_));
+
+#if defined(OS_CHROMEOS)
+ // Needed by IOThread constructor.
+ chromeos::DBusThreadManager::Initialize();
+ chromeos::NetworkHandler::Initialize();
+#endif
+ io_thread_.reset(new IOThread(&pref_service_, &policy_service_, nullptr,
+#if defined(ENABLE_EXTENSIONS)
+ event_router_forwarder_.get()
+#else
+ nullptr
+#endif
+ ));
+ // Init must be run on the IO thread.
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadPeer::InitIOThread, io_thread_.get()));
+ }
+
+ ~IOThreadTestWithIOThreadObject() override {
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadPeer::CleanUpIOThread, io_thread_.get()));
+#if defined(OS_CHROMEOS)
+ chromeos::NetworkHandler::Shutdown();
+ chromeos::DBusThreadManager::Shutdown();
+#endif
+ }
+ TestingPrefServiceSimple* pref_service() { return &pref_service_; }
+
+ void RunOnIOThreadBlocking(const base::Closure& task) {
+ base::RunLoop run_loop;
+ content::BrowserThread::PostTaskAndReply(
+ content::BrowserThread::IO, FROM_HERE, task, run_loop.QuitClosure());
+ run_loop.Run();
+ }
+
+ private:
+ content::TestBrowserThreadBundle thread_bundle_;
+ TestingPrefServiceSimple pref_service_;
+#if defined(ENABLE_EXTENSIONS)
+ scoped_refptr<extensions::EventRouterForwarder> event_router_forwarder_;
+#endif
+ policy::PolicyMap policy_map_;
+ policy::MockPolicyService policy_service_;
+ scoped_ptr<IOThread> io_thread_;
+};
+
+TEST_F(IOThreadTestWithIOThreadObject, UpdateNegotiateDisableCnameLookup) {
+ // This test uses the kDisableAuthNegotiateCnameLookup to check that
+ // the HttpAuthPreferences are correctly initialized and running on the
+ // IO thread. The other preferences are tested by the HttpAuthPreferences
+ // unit tests.
+ pref_service()->SetBoolean(prefs::kDisableAuthNegotiateCnameLookup, false);
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadTestWithIOThreadObject::CheckCnameLookup,
+ base::Unretained(this), false));
+ pref_service()->SetBoolean(prefs::kDisableAuthNegotiateCnameLookup, true);
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadTestWithIOThreadObject::CheckCnameLookup,
+ base::Unretained(this), true));
+}
+
+TEST_F(IOThreadTestWithIOThreadObject, UpdateEnableAuthNegotiatePort) {
+ pref_service()->SetBoolean(prefs::kEnableAuthNegotiatePort, false);
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadTestWithIOThreadObject::CheckNegotiateEnablePort,
+ base::Unretained(this), false));
+ pref_service()->SetBoolean(prefs::kEnableAuthNegotiatePort, true);
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadTestWithIOThreadObject::CheckNegotiateEnablePort,
+ base::Unretained(this), true));
+}
+
+TEST_F(IOThreadTestWithIOThreadObject, UpdateServerWhitelist) {
+ GURL url("http://test.example.com");
+
+ pref_service()->SetString(prefs::kAuthServerWhitelist, "xxx");
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadTestWithIOThreadObject::CheckCanUseDefaultCredentials,
+ base::Unretained(this), false, url));
+
+ pref_service()->SetString(prefs::kAuthServerWhitelist, "*");
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadTestWithIOThreadObject::CheckCanUseDefaultCredentials,
+ base::Unretained(this), true, url));
+}
+
+TEST_F(IOThreadTestWithIOThreadObject, UpdateDelegateWhitelist) {
+ GURL url("http://test.example.com");
+
+ pref_service()->SetString(prefs::kAuthNegotiateDelegateWhitelist, "");
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadTestWithIOThreadObject::CheckCanDelegate,
+ base::Unretained(this), false, url));
+
+ pref_service()->SetString(prefs::kAuthNegotiateDelegateWhitelist, "*");
+ RunOnIOThreadBlocking(
+ base::Bind(&IOThreadTestWithIOThreadObject::CheckCanDelegate,
+ base::Unretained(this), true, url));
+}
+
+#if defined(OS_ANDROID)
+// AuthAndroidNegotiateAccountType is only used on Android.
+TEST_F(IOThreadTestWithIOThreadObject, UpdateAuthAndroidNegotiateAccountType) {
+ pref_service()->SetString(prefs::kAuthAndroidNegotiateAccountType, "acc1");
+ RunOnIOThreadBlocking(base::Bind(
+ &IOThreadTestWithIOThreadObject::CheckAuthAndroidNegoitateAccountType,
+ base::Unretained(this), "acc1"));
+ pref_service()->SetString(prefs::kAuthAndroidNegotiateAccountType, "acc2");
+ RunOnIOThreadBlocking(base::Bind(
+ &IOThreadTestWithIOThreadObject::CheckAuthAndroidNegoitateAccountType,
+ base::Unretained(this), "acc2"));
+}
+#endif
+
} // namespace test
« no previous file with comments | « chrome/browser/io_thread.cc ('k') | chrome/browser/ui/login/login_prompt.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698