Index: chrome/browser/policy/policy_browsertest.cc |
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc |
index a364e86443864b0a77be83c7bc07c3ffaa724a99..177bea75fd1be10b112d622e3d0c4e1eb1f3b32e 100644 |
--- a/chrome/browser/policy/policy_browsertest.cc |
+++ b/chrome/browser/policy/policy_browsertest.cc |
@@ -105,6 +105,7 @@ |
#include "components/content_settings/core/common/content_settings_pattern.h" |
#include "components/content_settings/core/common/pref_names.h" |
#include "components/infobars/core/infobar.h" |
+#include "components/network_time/network_time_tracker.h" |
#include "components/omnibox/browser/autocomplete_controller.h" |
#include "components/omnibox/browser/omnibox_edit_model.h" |
#include "components/omnibox/browser/omnibox_view.h" |
@@ -182,6 +183,8 @@ |
#include "net/http/http_stream_factory.h" |
#include "net/http/transport_security_state.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/test/url_request/url_request_failed_job.h" |
#include "net/test/url_request/url_request_mock_http_job.h" |
#include "net/url_request/url_request.h" |
@@ -4501,4 +4504,67 @@ IN_PROC_BROWSER_TEST_F(ChromeOSPolicyTest, SystemTimezoneAutomaticDetection) { |
} |
#endif // defined(OS_CHROMEOS) |
+class NetworkTimePolicyTest : public PolicyTest { |
+ public: |
+ // A request handler that returns a dummy response and counts the number of |
+ // times it is called. |
+ std::unique_ptr<net::test_server::HttpResponse> CountingRequestHandler( |
+ const net::test_server::HttpRequest& request) { |
+ net::test_server::BasicHttpResponse* response = |
+ new net::test_server::BasicHttpResponse(); |
+ num_requests_++; |
+ response->set_code(net::HTTP_OK); |
+ response->set_content( |
+ ")]}'\n" |
+ "{\"current_time_millis\":1461621971825,\"server_nonce\":-6." |
+ "006853099049523E85}"); |
+ response->AddCustomHeader("x-cup-server-proof", "dead:beef"); |
+ return std::unique_ptr<net::test_server::HttpResponse>(response); |
+ } |
+ |
+ uint32_t num_requests() { return num_requests_; } |
+ |
+ private: |
+ uint32_t num_requests_ = 0; |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(NetworkTimePolicyTest, NetworkTimeQueriesDisabled) { |
+ // Set a policy to disable network time queries. |
+ PolicyMap policies; |
+ policies.Set(key::kNetworkTimeQueriesEnabled, POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
+ base::MakeUnique<base::Value>(false), nullptr); |
+ UpdateProviderPolicy(policies); |
+ |
+ embedded_test_server()->RegisterRequestHandler(base::Bind( |
+ &NetworkTimePolicyTest::CountingRequestHandler, base::Unretained(this))); |
+ ASSERT_TRUE(embedded_test_server()->Start()); |
+ g_browser_process->network_time_tracker()->SetTimeServerURLForTesting( |
+ embedded_test_server()->GetURL("/")); |
+ |
+ net::EmbeddedTestServer https_server_expired_( |
+ net::EmbeddedTestServer::TYPE_HTTPS); |
+ https_server_expired_.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); |
+ ASSERT_TRUE(https_server_expired_.Start()); |
+ |
+ // Navigate to a page with a certificate date error and then check that a |
+ // network time query was not sent. |
+ ui_test_utils::NavigateToURL(browser(), https_server_expired_.GetURL("/")); |
+ content::WebContents* tab = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ content::InterstitialPage* interstitial_page = tab->GetInterstitialPage(); |
+ ASSERT_TRUE(interstitial_page); |
+ EXPECT_EQ(0u, num_requests()); |
+ |
+ // Now enable the policy and check that a network time query is sent. |
+ policies.Set(key::kNetworkTimeQueriesEnabled, POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
+ base::MakeUnique<base::Value>(true), nullptr); |
+ UpdateProviderPolicy(policies); |
+ ui_test_utils::NavigateToURL(browser(), https_server_expired_.GetURL("/")); |
+ interstitial_page = tab->GetInterstitialPage(); |
+ ASSERT_TRUE(interstitial_page); |
+ EXPECT_EQ(1u, num_requests()); |
+} |
+ |
} // namespace policy |