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

Unified Diff: chrome/browser/chromeos/login/oauth2_browsertest.cc

Issue 99863007: Added CrOS-specific OAuth2 browser test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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
Index: chrome/browser/chromeos/login/oauth2_browsertest.cc
diff --git a/chrome/browser/chromeos/login/oauth2_browsertest.cc b/chrome/browser/chromeos/login/oauth2_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..bbbed3e9bc248d9434002f00f00b4ce5503585ce
--- /dev/null
+++ b/chrome/browser/chromeos/login/oauth2_browsertest.cc
@@ -0,0 +1,179 @@
+// Copyright (c) 2013 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 "base/message_loop/message_loop.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/chromeos/login/oauth2_login_manager.h"
+#include "chrome/browser/chromeos/login/oauth2_login_manager_factory.h"
+#include "chrome/browser/chromeos/login/oobe_base_test.h"
+#include "chrome/browser/chromeos/login/wizard_controller.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
+#include "content/public/browser/notification_service.h"
+#include "google_apis/gaia/gaia_constants.h"
+#include "google_apis/gaia/gaia_urls.h"
+
+namespace chromeos {
+
+namespace {
+
+// Email of owner account for test.
+const char kTestAccountId[] = "username@gmail.com";
+
+const char kTestAuthCode[] = "fake-auth-code";
+const char kTestGaiaUberToken[] = "fake-uber-token";
+const char kTestAuthLoginAccessToken[] = "fake-access-token";
+const char kTestRefreshToken[] = "fake-refresh-token";
+const char kTestSessionSIDCookie[] = "fake-session-SID-cookie";
+const char kTestSessionLSIDCookie[] = "fake-session-LSID-cookie";
+const char kTestUserinfoToken[] = "fake-userinfo-token";
+const char kTestLoginToken[] = "fake-login-token";
+const char kTestSyncToken[] = "fake-sync-token";
+const char kTestAuthLoginToken[] = "fake-oauthlogin-token";
+
+} // namespace
+
+class OAuth2Test : public OobeBaseTest {
+ protected:
+ OAuth2Test() {}
+
+ virtual void SetUpOnMainThread() OVERRIDE {
+ OobeBaseTest::SetUpOnMainThread();
+
+ // Configure OAuth authentication.
+ GaiaUrls* gaia_urls = GaiaUrls::GetInstance();
+
+ fake_gaia_.SetAuthTokens(kTestAuthCode,
+ kTestRefreshToken,
+ kTestAuthLoginAccessToken,
+ kTestGaiaUberToken,
+ kTestSessionSIDCookie,
+ kTestSessionLSIDCookie);
+ // This token satisfies the userinfo.email request from
+ // DeviceOAuth2TokenService used in token validation.
+ FakeGaia::AccessTokenInfo userinfo_token_info;
+ userinfo_token_info.token = kTestUserinfoToken;
+ userinfo_token_info.scopes.insert(
+ "https://www.googleapis.com/auth/userinfo.email");
+ userinfo_token_info.audience = gaia_urls->oauth2_chrome_client_id();
+ userinfo_token_info.email = kTestAccountId;
+ fake_gaia_.IssueOAuthToken(kTestRefreshToken, userinfo_token_info);
+
+ FakeGaia::AccessTokenInfo userinfo_profile_token_info;
+ userinfo_profile_token_info.token = kTestUserinfoToken;
+ userinfo_profile_token_info.scopes.insert(
+ "https://www.googleapis.com/auth/userinfo.profile");
+ userinfo_profile_token_info.audience = gaia_urls->oauth2_chrome_client_id();
+ userinfo_profile_token_info.email = kTestAccountId;
+ fake_gaia_.IssueOAuthToken(kTestRefreshToken, userinfo_profile_token_info);
+
+ // The any-api access token for accessing the token minting endpoint.
+ FakeGaia::AccessTokenInfo login_token_info;
+ login_token_info.token = kTestLoginToken;
+ login_token_info.scopes.insert(GaiaConstants::kAnyApiOAuth2Scope);
+ login_token_info.audience = gaia_urls->oauth2_chrome_client_id();
+ fake_gaia_.IssueOAuthToken(kTestRefreshToken, login_token_info);
+
+ // The /auth/chromesync access token for accessing sync endpoint.
+ FakeGaia::AccessTokenInfo sync_token_info;
+ sync_token_info.token = kTestSyncToken;
+ sync_token_info.scopes.insert(GaiaConstants::kChromeSyncOAuth2Scope);
+ sync_token_info.audience = gaia_urls->oauth2_chrome_client_id();
+ fake_gaia_.IssueOAuthToken(kTestRefreshToken, sync_token_info);
+
+ FakeGaia::AccessTokenInfo auth_login_token_info;
+ auth_login_token_info.token = kTestAuthLoginToken;
+ auth_login_token_info.scopes.insert(gaia_urls->oauth1_login_scope());
+ auth_login_token_info.audience = gaia_urls->oauth2_chrome_client_id();
+ fake_gaia_.IssueOAuthToken(kTestRefreshToken, auth_login_token_info);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(OAuth2Test);
+};
+
+class OAuth2LoginManagerStateWaiter : public OAuth2LoginManager::Observer {
+ public:
+ explicit OAuth2LoginManagerStateWaiter(Profile* profile)
+ : profile_(profile),
+ waiting_for_state_(false),
+ final_state_(OAuth2LoginManager::SESSION_RESTORE_NOT_STARTED) {
+ }
+
+ void WaitForStates(
+ const std::set<OAuth2LoginManager::SessionRestoreState>& states) {
+ DCHECK(!waiting_for_state_);
+ OAuth2LoginManager* login_manager =
+ OAuth2LoginManagerFactory::GetInstance()->GetForProfile(profile_);
+ states_ = states;
+ if (states_.find(login_manager->state()) != states_.end()) {
+ final_state_ = login_manager->state();
+ return;
+ }
+
+ waiting_for_state_ = true;
+ login_manager->AddObserver(this);
+ runner_ = new content::MessageLoopRunner;
+ runner_->Run();
+ login_manager->RemoveObserver(this);
+ }
+
+ OAuth2LoginManager::SessionRestoreState final_state() { return final_state_; }
+
+ private:
+ // OAuth2LoginManager::Observer overrides.
+ virtual void OnSessionRestoreStateChanged(
+ Profile* user_profile,
+ OAuth2LoginManager::SessionRestoreState state) OVERRIDE {
+ if (!waiting_for_state_)
+ return;
+
+ if (states_.find(state) == states_.end())
+ return;
+
+ final_state_ = state;
+ waiting_for_state_ = false;
+ runner_->Quit();
+ }
+
+ Profile* profile_;
+ std::set<OAuth2LoginManager::SessionRestoreState> states_;
+ bool waiting_for_state_;
+ OAuth2LoginManager::SessionRestoreState final_state_;
+ scoped_refptr<content::MessageLoopRunner> runner_;
+
+ DISALLOW_COPY_AND_ASSIGN(OAuth2LoginManagerStateWaiter);
+};
+
+IN_PROC_BROWSER_TEST_F(OAuth2Test, NewUser) {
+ SimulateNetworkOnline();
+ chromeos::WizardController::SkipPostLoginScreensForTesting();
+ chromeos::WizardController* wizard_controller =
+ chromeos::WizardController::default_controller();
+ wizard_controller->SkipToLoginForTesting(LoginScreenContext());
+
+ content::WindowedNotificationObserver(
+ chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
+ content::NotificationService::AllSources()).Wait();
+
+ // Use capitalized and dotted user name on purpose to make sure
+ // our email normalization kicks in.
+ GetLoginDisplay()->ShowSigninScreenForCreds("User.Name", "password");
+
+ content::WindowedNotificationObserver(
+ chrome::NOTIFICATION_SESSION_STARTED,
+ content::NotificationService::AllSources()).Wait();
+
+ std::set<OAuth2LoginManager::SessionRestoreState> states;
+ states.insert(OAuth2LoginManager::SESSION_RESTORE_DONE);
+ states.insert(OAuth2LoginManager::SESSION_RESTORE_FAILED);
+ states.insert(OAuth2LoginManager::SESSION_RESTORE_CONNECTION_FAILED);
+ OAuth2LoginManagerStateWaiter merge_session_waiter(
+ ProfileManager::GetPrimaryUserProfile());
+ merge_session_waiter.WaitForStates(states);
+ EXPECT_EQ(merge_session_waiter.final_state(),
+ OAuth2LoginManager::SESSION_RESTORE_DONE);
+}
+
+} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/login/kiosk_browsertest.cc ('k') | chrome/browser/chromeos/login/oauth2_login_manager_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698