| // Copyright 2016 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 "components/network_time/network_time_test_utils.h" | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "base/strings/string_number_conversions.h" | 
 | #include "net/http/http_response_headers.h" | 
 | #include "net/test/embedded_test_server/http_response.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | namespace network_time { | 
 |  | 
 | // Update as follows: | 
 | // | 
 | // curl -i http://clients2.google.com/time/1/current?cup2key=2:123123123 | 
 | // | 
 | // where 2 is the key version and 123123123 is the nonce.  Copy the | 
 | // response and the x-cup-server-proof header into | 
 | // |kGoodTimeResponseBody| and |kGoodTimeResponseServerProofHeader| | 
 | // respectively, and the 'current_time_millis' value of the response | 
 | // into |kGoodTimeResponseHandlerJsTime|. | 
 | const char* kGoodTimeResponseBody[] = { | 
 |     ")]}'\n{\"current_time_millis\":1522081016324," | 
 |     "\"server_nonce\":-1.475187036492045E154}", | 
 |     ")]}'\n{\"current_time_millis\":1522096305984," | 
 |     "\"server_nonce\":-1.1926302260014708E-276}"}; | 
 | const char* kGoodTimeResponseServerProofHeader[] = { | 
 |     "3046022100c0351a20558bac037253f3969547f82805b340f51de06461e83f33b41f8e85d3" | 
 |     "022100d04162c448438e5462df4bf6171ef26c53ec7d3a0cb915409e8bec6c99c69c67:" | 
 |     "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", | 
 |     "304402201758cc66f7be58692362dad351ee71ecce78bd8491c8bfe903da39ea048ff67d02" | 
 |     "203aa51acfac9462b19ef3e6d6c885a60cb0858a274ae97506934737d8e66bc081:" | 
 |     "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}; | 
 | const double kGoodTimeResponseHandlerJsTime[] = {1522081016324, 1522096305984}; | 
 |  | 
 | std::unique_ptr<net::test_server::HttpResponse> GoodTimeResponseHandler( | 
 |     const net::test_server::HttpRequest& request) { | 
 |   net::test_server::BasicHttpResponse* response = | 
 |       new net::test_server::BasicHttpResponse(); | 
 |   response->set_code(net::HTTP_OK); | 
 |   response->set_content(kGoodTimeResponseBody[0]); | 
 |   response->AddCustomHeader("x-cup-server-proof", | 
 |                             kGoodTimeResponseServerProofHeader[0]); | 
 |   return std::unique_ptr<net::test_server::HttpResponse>(response); | 
 | } | 
 |  | 
 | FieldTrialTest::FieldTrialTest() {} | 
 |  | 
 | FieldTrialTest::~FieldTrialTest() {} | 
 |  | 
 | void FieldTrialTest::SetNetworkQueriesWithVariationsService( | 
 |     bool enable, | 
 |     float query_probability, | 
 |     NetworkTimeTracker::FetchBehavior fetch_behavior) { | 
 |   scoped_feature_list_.Reset(); | 
 |   if (!enable) { | 
 |     scoped_feature_list_.InitAndDisableFeature(kNetworkTimeServiceQuerying); | 
 |     return; | 
 |   } | 
 |  | 
 |   base::FieldTrialParams params; | 
 |   params["RandomQueryProbability"] = base::NumberToString(query_probability); | 
 |   params["CheckTimeIntervalSeconds"] = base::NumberToString(360); | 
 |   std::string fetch_behavior_param; | 
 |   switch (fetch_behavior) { | 
 |     case NetworkTimeTracker::FETCH_BEHAVIOR_UNKNOWN: | 
 |       NOTREACHED(); | 
 |       fetch_behavior_param = "unknown"; | 
 |       break; | 
 |     case NetworkTimeTracker::FETCHES_IN_BACKGROUND_ONLY: | 
 |       fetch_behavior_param = "background-only"; | 
 |       break; | 
 |     case NetworkTimeTracker::FETCHES_ON_DEMAND_ONLY: | 
 |       fetch_behavior_param = "on-demand-only"; | 
 |       break; | 
 |     case NetworkTimeTracker::FETCHES_IN_BACKGROUND_AND_ON_DEMAND: | 
 |       fetch_behavior_param = "background-and-on-demand"; | 
 |       break; | 
 |   } | 
 |   params["FetchBehavior"] = fetch_behavior_param; | 
 |   scoped_feature_list_.InitAndEnableFeatureWithParameters( | 
 |       kNetworkTimeServiceQuerying, params); | 
 | } | 
 |  | 
 | }  // namespace network_time |