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

Side by Side Diff: components/signin/core/browser/signin_header_helper_unittest.cc

Issue 2918403009: [Dice] Parse the Dice response header (Closed)
Patch Set: Remove logout url Created 3 years, 6 months 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 unified diff | Download patch
« no previous file with comments | « components/signin/core/browser/signin_header_helper.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/signin/core/browser/signin_header_helper.h" 5 #include "components/signin/core/browser/signin_header_helper.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/strings/stringprintf.h"
12 #include "build/build_config.h" 13 #include "build/build_config.h"
13 #include "components/content_settings/core/browser/cookie_settings.h" 14 #include "components/content_settings/core/browser/cookie_settings.h"
14 #include "components/signin/core/browser/chrome_connected_header_helper.h" 15 #include "components/signin/core/browser/chrome_connected_header_helper.h"
15 #include "components/signin/core/common/profile_management_switches.h" 16 #include "components/signin/core/common/profile_management_switches.h"
16 #include "components/sync_preferences/testing_pref_service_syncable.h" 17 #include "components/sync_preferences/testing_pref_service_syncable.h"
17 #include "google_apis/gaia/gaia_urls.h" 18 #include "google_apis/gaia/gaia_urls.h"
18 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" 19 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
19 #include "net/url_request/url_request_test_util.h" 20 #include "net/url_request/url_request_test_util.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
21 #include "url/gurl.h" 22 #include "url/gurl.h"
22 23
23 #if !defined(OS_IOS) && !defined(OS_ANDROID) 24 #if !defined(OS_IOS) && !defined(OS_ANDROID)
24 #include "components/signin/core/browser/dice_header_helper.h" 25 #include "components/signin/core/browser/dice_header_helper.h"
25 #endif 26 #endif
26 27
28 namespace signin {
29
27 class SigninHeaderHelperTest : public testing::Test { 30 class SigninHeaderHelperTest : public testing::Test {
28 protected: 31 protected:
29 void SetUp() override { 32 void SetUp() override {
30 content_settings::CookieSettings::RegisterProfilePrefs(prefs_.registry()); 33 content_settings::CookieSettings::RegisterProfilePrefs(prefs_.registry());
31 HostContentSettingsMap::RegisterProfilePrefs(prefs_.registry()); 34 HostContentSettingsMap::RegisterProfilePrefs(prefs_.registry());
32 35
33 settings_map_ = new HostContentSettingsMap( 36 settings_map_ = new HostContentSettingsMap(
34 &prefs_, false /* incognito_profile */, false /* guest_profile */, 37 &prefs_, false /* incognito_profile */, false /* guest_profile */,
35 false /* store_last_modified */); 38 false /* store_last_modified */);
36 cookie_settings_ = 39 cookie_settings_ =
37 new content_settings::CookieSettings(settings_map_.get(), &prefs_, ""); 40 new content_settings::CookieSettings(settings_map_.get(), &prefs_, "");
38 } 41 }
39 42
40 void TearDown() override { settings_map_->ShutdownOnUIThread(); } 43 void TearDown() override { settings_map_->ShutdownOnUIThread(); }
41 44
42 void CheckMirrorCookieRequest(const GURL& url, 45 void CheckMirrorCookieRequest(const GURL& url,
43 const std::string& account_id, 46 const std::string& account_id,
44 const std::string& expected_request) { 47 const std::string& expected_request) {
45 EXPECT_EQ(signin::BuildMirrorRequestCookieIfPossible( 48 EXPECT_EQ(
46 url, account_id, cookie_settings_.get(), 49 BuildMirrorRequestCookieIfPossible(
47 signin::PROFILE_MODE_DEFAULT), 50 url, account_id, cookie_settings_.get(), PROFILE_MODE_DEFAULT),
48 expected_request); 51 expected_request);
49 } 52 }
50 53
51 std::unique_ptr<net::URLRequest> CreateRequest( 54 std::unique_ptr<net::URLRequest> CreateRequest(
52 const GURL& url, 55 const GURL& url,
53 const std::string& account_id) { 56 const std::string& account_id) {
54 std::unique_ptr<net::URLRequest> url_request = 57 std::unique_ptr<net::URLRequest> url_request =
55 url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr, 58 url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr,
56 TRAFFIC_ANNOTATION_FOR_TESTS); 59 TRAFFIC_ANNOTATION_FOR_TESTS);
57 signin::AppendOrRemoveAccountConsistentyRequestHeader( 60 AppendOrRemoveAccountConsistentyRequestHeader(
58 url_request.get(), GURL(), account_id, cookie_settings_.get(), 61 url_request.get(), GURL(), account_id, cookie_settings_.get(),
59 signin::PROFILE_MODE_DEFAULT); 62 PROFILE_MODE_DEFAULT);
60 return url_request; 63 return url_request;
61 } 64 }
62 65
63 void CheckAccountConsistencyHeaderRequest( 66 void CheckAccountConsistencyHeaderRequest(
64 net::URLRequest* url_request, 67 net::URLRequest* url_request,
65 const char* header_name, 68 const char* header_name,
66 const std::string& expected_request) { 69 const std::string& expected_request) {
67 bool expected_result = !expected_request.empty(); 70 bool expected_result = !expected_request.empty();
68 std::string request; 71 std::string request;
69 EXPECT_EQ( 72 EXPECT_EQ(
70 url_request->extra_request_headers().GetHeader(header_name, &request), 73 url_request->extra_request_headers().GetHeader(header_name, &request),
71 expected_result); 74 expected_result);
72 if (expected_result) { 75 if (expected_result) {
73 EXPECT_EQ(expected_request, request); 76 EXPECT_EQ(expected_request, request);
74 } 77 }
75 } 78 }
76 79
77 void CheckMirrorHeaderRequest(const GURL& url, 80 void CheckMirrorHeaderRequest(const GURL& url,
78 const std::string& account_id, 81 const std::string& account_id,
79 const std::string& expected_request) { 82 const std::string& expected_request) {
80 std::unique_ptr<net::URLRequest> url_request = 83 std::unique_ptr<net::URLRequest> url_request =
81 CreateRequest(url, account_id); 84 CreateRequest(url, account_id);
82 CheckAccountConsistencyHeaderRequest( 85 CheckAccountConsistencyHeaderRequest(
83 url_request.get(), signin::kChromeConnectedHeader, expected_request); 86 url_request.get(), kChromeConnectedHeader, expected_request);
84 } 87 }
85 88
86 #if !defined(OS_IOS) && !defined(OS_ANDROID) 89 #if !defined(OS_IOS) && !defined(OS_ANDROID)
87 void CheckDiceHeaderRequest(const GURL& url, 90 void CheckDiceHeaderRequest(const GURL& url,
88 const std::string& account_id, 91 const std::string& account_id,
89 const std::string& expected_mirror_request, 92 const std::string& expected_mirror_request,
90 const std::string& expected_dice_request) { 93 const std::string& expected_dice_request) {
91 std::unique_ptr<net::URLRequest> url_request = 94 std::unique_ptr<net::URLRequest> url_request =
92 CreateRequest(url, account_id); 95 CreateRequest(url, account_id);
93 CheckAccountConsistencyHeaderRequest(url_request.get(),
94 signin::kChromeConnectedHeader,
95 expected_mirror_request);
96 CheckAccountConsistencyHeaderRequest( 96 CheckAccountConsistencyHeaderRequest(
97 url_request.get(), signin::kDiceRequestHeader, expected_dice_request); 97 url_request.get(), kChromeConnectedHeader, expected_mirror_request);
98 CheckAccountConsistencyHeaderRequest(url_request.get(), kDiceRequestHeader,
99 expected_dice_request);
98 } 100 }
99 #endif 101 #endif
100 102
101 base::MessageLoop loop_; 103 base::MessageLoop loop_;
102 104
103 sync_preferences::TestingPrefServiceSyncable prefs_; 105 sync_preferences::TestingPrefServiceSyncable prefs_;
104 net::TestURLRequestContext url_request_context_; 106 net::TestURLRequestContext url_request_context_;
105 107
106 scoped_refptr<HostContentSettingsMap> settings_map_; 108 scoped_refptr<HostContentSettingsMap> settings_map_;
107 scoped_refptr<content_settings::CookieSettings> cookie_settings_; 109 scoped_refptr<content_settings::CookieSettings> cookie_settings_;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 switches::EnableAccountConsistencyMirrorForTesting( 217 switches::EnableAccountConsistencyMirrorForTesting(
216 base::CommandLine::ForCurrentProcess()); 218 base::CommandLine::ForCurrentProcess());
217 CheckMirrorHeaderRequest( 219 CheckMirrorHeaderRequest(
218 GURL("https://docs.google.com/document"), "0123456789", 220 GURL("https://docs.google.com/document"), "0123456789",
219 "id=0123456789,mode=0,enable_account_consistency=true"); 221 "id=0123456789,mode=0,enable_account_consistency=true");
220 CheckMirrorCookieRequest( 222 CheckMirrorCookieRequest(
221 GURL("https://drive.google.com/drive"), "0123456789", 223 GURL("https://drive.google.com/drive"), "0123456789",
222 "id=0123456789:mode=0:enable_account_consistency=true"); 224 "id=0123456789:mode=0:enable_account_consistency=true");
223 } 225 }
224 226
227 TEST_F(SigninHeaderHelperTest, TestDiceInvalidResponseParams) {
228 DiceResponseParams params = BuildDiceResponseParams("blah");
229 EXPECT_EQ(DiceAction::NONE, params.user_intention);
230 }
231
232 TEST_F(SigninHeaderHelperTest, TestBuildDiceResponseParams) {
233 const char kAuthorizationCode[] = "authorization_code";
234 const char kEmail[] = "foo@example.com";
235 const char kObfuscatedGaiaID[] = "obfuscated_gaia_id";
236 const int kSessionIndex = 42;
237
238 {
239 // Signin response.
240 DiceResponseParams params = BuildDiceResponseParams(base::StringPrintf(
241 "action=SIGNIN,id=%s,email=%s,authuser=%i,authorization_code=%s",
242 kObfuscatedGaiaID, kEmail, kSessionIndex, kAuthorizationCode));
243 EXPECT_EQ(DiceAction::SIGNIN, params.user_intention);
244 EXPECT_EQ(kObfuscatedGaiaID, params.obfuscated_gaia_id);
245 EXPECT_EQ(kEmail, params.email);
246 EXPECT_EQ(kSessionIndex, params.session_index);
247 EXPECT_EQ(kAuthorizationCode, params.authorization_code);
248 }
249
250 {
251 // Signout response.
252 DiceResponseParams params = BuildDiceResponseParams(
253 base::StringPrintf("action=SIGNOUT,id=%s,email=%s,authuser=%i",
254 kObfuscatedGaiaID, kEmail, kSessionIndex));
255 EXPECT_EQ(DiceAction::SIGNOUT, params.user_intention);
256 EXPECT_EQ(kObfuscatedGaiaID, params.obfuscated_gaia_id);
257 EXPECT_EQ(kEmail, params.email);
258 EXPECT_EQ(kSessionIndex, params.session_index);
259 EXPECT_EQ("", params.authorization_code);
260 }
261
262 {
263 // Missing authorization code.
264 DiceResponseParams params = BuildDiceResponseParams(
265 base::StringPrintf("action=SIGNIN,id=%s,email=%s,authuser=%i",
266 kObfuscatedGaiaID, kEmail, kSessionIndex));
267 EXPECT_EQ(DiceAction::NONE, params.user_intention);
268 }
269
270 {
271 // Missing non-optional field (email).
272 DiceResponseParams params = BuildDiceResponseParams(base::StringPrintf(
273 "action=SIGNIN,id=%s,authuser=%i,authorization_code=%s",
274 kObfuscatedGaiaID, kSessionIndex, kAuthorizationCode));
275 EXPECT_EQ(DiceAction::NONE, params.user_intention);
276 }
277 }
278
225 #endif // !defined(OS_ANDROID) && !defined(OS_IOS) 279 #endif // !defined(OS_ANDROID) && !defined(OS_IOS)
226 280
227 // Tests that the Mirror header request is returned normally when the redirect 281 // Tests that the Mirror header request is returned normally when the redirect
228 // URL is eligible. 282 // URL is eligible.
229 TEST_F(SigninHeaderHelperTest, TestMirrorHeaderEligibleRedirectURL) { 283 TEST_F(SigninHeaderHelperTest, TestMirrorHeaderEligibleRedirectURL) {
230 switches::EnableAccountConsistencyMirrorForTesting( 284 switches::EnableAccountConsistencyMirrorForTesting(
231 base::CommandLine::ForCurrentProcess()); 285 base::CommandLine::ForCurrentProcess());
232 const GURL url("https://docs.google.com/document"); 286 const GURL url("https://docs.google.com/document");
233 const GURL redirect_url("https://www.google.com"); 287 const GURL redirect_url("https://www.google.com");
234 const std::string account_id = "0123456789"; 288 const std::string account_id = "0123456789";
235 std::unique_ptr<net::URLRequest> url_request = 289 std::unique_ptr<net::URLRequest> url_request =
236 url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr, 290 url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr,
237 TRAFFIC_ANNOTATION_FOR_TESTS); 291 TRAFFIC_ANNOTATION_FOR_TESTS);
238 signin::AppendOrRemoveAccountConsistentyRequestHeader( 292 AppendOrRemoveAccountConsistentyRequestHeader(
239 url_request.get(), redirect_url, account_id, cookie_settings_.get(), 293 url_request.get(), redirect_url, account_id, cookie_settings_.get(),
240 signin::PROFILE_MODE_DEFAULT); 294 PROFILE_MODE_DEFAULT);
241 EXPECT_TRUE(url_request->extra_request_headers().HasHeader( 295 EXPECT_TRUE(
242 signin::kChromeConnectedHeader)); 296 url_request->extra_request_headers().HasHeader(kChromeConnectedHeader));
243 } 297 }
244 298
245 // Tests that the Mirror header request is stripped when the redirect URL is not 299 // Tests that the Mirror header request is stripped when the redirect URL is not
246 // eligible. 300 // eligible.
247 TEST_F(SigninHeaderHelperTest, TestMirrorHeaderNonEligibleRedirectURL) { 301 TEST_F(SigninHeaderHelperTest, TestMirrorHeaderNonEligibleRedirectURL) {
248 switches::EnableAccountConsistencyMirrorForTesting( 302 switches::EnableAccountConsistencyMirrorForTesting(
249 base::CommandLine::ForCurrentProcess()); 303 base::CommandLine::ForCurrentProcess());
250 const GURL url("https://docs.google.com/document"); 304 const GURL url("https://docs.google.com/document");
251 const GURL redirect_url("http://www.foo.com"); 305 const GURL redirect_url("http://www.foo.com");
252 const std::string account_id = "0123456789"; 306 const std::string account_id = "0123456789";
253 std::unique_ptr<net::URLRequest> url_request = 307 std::unique_ptr<net::URLRequest> url_request =
254 url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr, 308 url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr,
255 TRAFFIC_ANNOTATION_FOR_TESTS); 309 TRAFFIC_ANNOTATION_FOR_TESTS);
256 signin::AppendOrRemoveAccountConsistentyRequestHeader( 310 AppendOrRemoveAccountConsistentyRequestHeader(
257 url_request.get(), redirect_url, account_id, cookie_settings_.get(), 311 url_request.get(), redirect_url, account_id, cookie_settings_.get(),
258 signin::PROFILE_MODE_DEFAULT); 312 PROFILE_MODE_DEFAULT);
259 EXPECT_FALSE(url_request->extra_request_headers().HasHeader( 313 EXPECT_FALSE(
260 signin::kChromeConnectedHeader)); 314 url_request->extra_request_headers().HasHeader(kChromeConnectedHeader));
261 } 315 }
262 316
263 // Tests that the Mirror header, whatever its value is, is untouched when both 317 // Tests that the Mirror header, whatever its value is, is untouched when both
264 // the current and the redirect URL are non-eligible. 318 // the current and the redirect URL are non-eligible.
265 TEST_F(SigninHeaderHelperTest, TestIgnoreMirrorHeaderNonEligibleURLs) { 319 TEST_F(SigninHeaderHelperTest, TestIgnoreMirrorHeaderNonEligibleURLs) {
266 switches::EnableAccountConsistencyMirrorForTesting( 320 switches::EnableAccountConsistencyMirrorForTesting(
267 base::CommandLine::ForCurrentProcess()); 321 base::CommandLine::ForCurrentProcess());
268 const GURL url("https://www.bar.com"); 322 const GURL url("https://www.bar.com");
269 const GURL redirect_url("http://www.foo.com"); 323 const GURL redirect_url("http://www.foo.com");
270 const std::string account_id = "0123456789"; 324 const std::string account_id = "0123456789";
271 const std::string fake_header = "foo,bar"; 325 const std::string fake_header = "foo,bar";
272 std::unique_ptr<net::URLRequest> url_request = 326 std::unique_ptr<net::URLRequest> url_request =
273 url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr, 327 url_request_context_.CreateRequest(url, net::DEFAULT_PRIORITY, nullptr,
274 TRAFFIC_ANNOTATION_FOR_TESTS); 328 TRAFFIC_ANNOTATION_FOR_TESTS);
275 url_request->SetExtraRequestHeaderByName(signin::kChromeConnectedHeader, 329 url_request->SetExtraRequestHeaderByName(kChromeConnectedHeader, fake_header,
276 fake_header, false); 330 false);
277 signin::AppendOrRemoveAccountConsistentyRequestHeader( 331 AppendOrRemoveAccountConsistentyRequestHeader(
278 url_request.get(), redirect_url, account_id, cookie_settings_.get(), 332 url_request.get(), redirect_url, account_id, cookie_settings_.get(),
279 signin::PROFILE_MODE_DEFAULT); 333 PROFILE_MODE_DEFAULT);
280 std::string header; 334 std::string header;
281 EXPECT_TRUE(url_request->extra_request_headers().GetHeader( 335 EXPECT_TRUE(url_request->extra_request_headers().GetHeader(
282 signin::kChromeConnectedHeader, &header)); 336 kChromeConnectedHeader, &header));
283 EXPECT_EQ(fake_header, header); 337 EXPECT_EQ(fake_header, header);
284 } 338 }
339
340 } // namespace signin
OLDNEW
« no previous file with comments | « components/signin/core/browser/signin_header_helper.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698