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

Unified Diff: chrome/browser/extensions/api/identity/gaia_web_auth_flow_unittest.cc

Issue 15148007: Identity API: web-based scope approval dialogs for getAuthToken (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address reviewer comments Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/identity/gaia_web_auth_flow_unittest.cc
diff --git a/chrome/browser/extensions/api/identity/gaia_web_auth_flow_unittest.cc b/chrome/browser/extensions/api/identity/gaia_web_auth_flow_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..77c7fc04972073b1a322c38881a02ff3f1d369dd
--- /dev/null
+++ b/chrome/browser/extensions/api/identity/gaia_web_auth_flow_unittest.cc
@@ -0,0 +1,235 @@
+// 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 "chrome/browser/extensions/api/identity/gaia_web_auth_flow.h"
+
+#include <vector>
+
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+class FakeWebAuthFlow : public WebAuthFlow {
+ public:
+ explicit FakeWebAuthFlow(WebAuthFlow::Delegate* delegate)
+ : WebAuthFlow(delegate,
+ NULL,
+ GURL(),
+ WebAuthFlow::INTERACTIVE,
+ gfx::Rect(),
+ chrome::GetActiveDesktop()) {}
+
+ virtual void Start() OVERRIDE {}
+};
+
+class TestGaiaWebAuthFlow : public GaiaWebAuthFlow {
+ public:
+ TestGaiaWebAuthFlow(GaiaWebAuthFlow::Delegate* delegate,
+ const std::string& extension_id,
+ const OAuth2Info& oauth2_info,
+ GoogleServiceAuthError::State ubertoken_error_state)
+ : GaiaWebAuthFlow(delegate,
+ NULL,
+ chrome::GetActiveDesktop(),
+ "extension_id",
+ oauth2_info),
+ ubertoken_error_(ubertoken_error_state) {}
+
+ virtual void Start() OVERRIDE {
+ if (ubertoken_error_.state() == GoogleServiceAuthError::NONE)
+ OnUbertokenSuccess("fake_ubertoken");
+ else
+ OnUbertokenFailure(ubertoken_error_);
+ }
+
+ private:
+ virtual scoped_ptr<WebAuthFlow> CreateWebAuthFlow(GURL url) OVERRIDE {
+ return scoped_ptr<WebAuthFlow>(new FakeWebAuthFlow(this));
+ }
+
+ GoogleServiceAuthError ubertoken_error_;
+};
+
+class MockGaiaWebAuthFlowDelegate : public GaiaWebAuthFlow::Delegate {
+ public:
+ MOCK_METHOD3(OnGaiaFlowFailure,
+ void(GaiaWebAuthFlow::Failure failure,
+ GoogleServiceAuthError service_error,
+ const std::string& oauth_error));
+ MOCK_METHOD2(OnGaiaFlowCompleted,
+ void(const std::string& access_token,
+ const std::string& expiration));
+};
+
+class IdentityGaiaWebAuthFlowTest : public testing::Test {
+ public:
+ IdentityGaiaWebAuthFlowTest()
+ : ubertoken_error_state_(GoogleServiceAuthError::NONE) {}
+
+ scoped_ptr<TestGaiaWebAuthFlow> CreateTestFlow() {
+ OAuth2Info oauth2_info;
+ oauth2_info.client_id = "fake.client.id";
+ return scoped_ptr<TestGaiaWebAuthFlow>(new TestGaiaWebAuthFlow(
+ &delegate_, "extension_id", oauth2_info, ubertoken_error_state_));
+
+ }
+
+ std::string GetFinalTitle(const std::string& fragment) {
+ return std::string("Loading id.client.fake:/extension_id#") + fragment;
+ }
+
+ GoogleServiceAuthError GetNoneServiceError() {
+ return GoogleServiceAuthError(GoogleServiceAuthError::NONE);
+ }
+
+ void set_ubertoken_error(
+ GoogleServiceAuthError::State ubertoken_error_state) {
+ ubertoken_error_state_ = ubertoken_error_state;
+ }
+
+ protected:
+ testing::StrictMock<MockGaiaWebAuthFlowDelegate> delegate_;
+ GoogleServiceAuthError::State ubertoken_error_state_;
+};
+
+TEST_F(IdentityGaiaWebAuthFlowTest, OAuthError) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ EXPECT_CALL(delegate_, OnGaiaFlowFailure(
+ GaiaWebAuthFlow::OAUTH_ERROR,
+ GoogleServiceAuthError(GoogleServiceAuthError::NONE),
+ "access_denied"));
+ flow->OnAuthFlowTitleChange(GetFinalTitle("error=access_denied"));
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, Token) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ EXPECT_CALL(delegate_, OnGaiaFlowCompleted("fake_access_token", ""));
+ flow->OnAuthFlowTitleChange(GetFinalTitle("access_token=fake_access_token"));
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, TokenAndExpiration) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ EXPECT_CALL(delegate_, OnGaiaFlowCompleted("fake_access_token", "3600"));
+ flow->OnAuthFlowTitleChange(
+ GetFinalTitle("access_token=fake_access_token&expires_in=3600"));
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, ExtraFragmentParametersSuccess) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ EXPECT_CALL(delegate_,
+ OnGaiaFlowCompleted("fake_access_token", "3600"));
+ flow->OnAuthFlowTitleChange(GetFinalTitle("chaff1=stuff&"
+ "expires_in=3600&"
+ "chaff2=and&"
+ "nonerror=fake_error&"
+ "chaff3=nonsense&"
+ "access_token=fake_access_token&"
+ "chaff4="));
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, ExtraFragmentParametersError) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ EXPECT_CALL(delegate_, OnGaiaFlowFailure(
+ GaiaWebAuthFlow::OAUTH_ERROR,
+ GoogleServiceAuthError(GoogleServiceAuthError::NONE),
+ "fake_error"));
+ flow->OnAuthFlowTitleChange(GetFinalTitle("chaff1=stuff&"
+ "expires_in=3600&"
+ "chaff2=and&"
+ "error=fake_error&"
+ "chaff3=nonsense&"
+ "access_token=fake_access_token&"
+ "chaff4="));
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, TitleSpam) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ flow->OnAuthFlowTitleChange(
+ "Loading https://extension_id.chromiumapp.org/#error=non_final_title");
+ flow->OnAuthFlowTitleChange("I'm feeling entitled.");
+ flow->OnAuthFlowTitleChange("");
+ flow->OnAuthFlowTitleChange(
+ "Loading id.client.fake:/bad_extension_id#error=non_final_title");
+ flow->OnAuthFlowTitleChange(
+ "Loading bad.id.client.fake:/extension_id#error=non_final_title");
+ EXPECT_CALL(delegate_, OnGaiaFlowCompleted("fake_access_token", ""));
+ flow->OnAuthFlowTitleChange(GetFinalTitle("access_token=fake_access_token"));
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, EmptyFragment) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ EXPECT_CALL(
+ delegate_,
+ OnGaiaFlowFailure(
+ GaiaWebAuthFlow::INVALID_REDIRECT,
+ GoogleServiceAuthError(GoogleServiceAuthError::NONE),
+ ""));
+ flow->OnAuthFlowTitleChange(GetFinalTitle(""));
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, JunkFragment) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ EXPECT_CALL(
+ delegate_,
+ OnGaiaFlowFailure(
+ GaiaWebAuthFlow::INVALID_REDIRECT,
+ GoogleServiceAuthError(GoogleServiceAuthError::NONE),
+ ""));
+ flow->OnAuthFlowTitleChange(GetFinalTitle("thisisjustabunchofjunk"));
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, NoFragment) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ // This won't be recognized as an interesting title.
+ flow->OnAuthFlowTitleChange("Loading id.client.fake:/extension_id");
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, Host) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ // These won't be recognized as interesting titles.
+ flow->OnAuthFlowTitleChange(
+ "Loading id.client.fake://extension_id#access_token=fake_access_token");
+ flow->OnAuthFlowTitleChange(
+ "Loading id.client.fake://extension_id/#access_token=fake_access_token");
+ flow->OnAuthFlowTitleChange(
+ "Loading "
+ "id.client.fake://host/extension_id/#access_token=fake_access_token");
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, UbertokenFailure) {
+ set_ubertoken_error(GoogleServiceAuthError::CONNECTION_FAILED);
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ EXPECT_CALL(
+ delegate_,
+ OnGaiaFlowFailure(
+ GaiaWebAuthFlow::SERVICE_AUTH_ERROR,
+ GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED),
+ ""));
+ flow->Start();
+}
+
+TEST_F(IdentityGaiaWebAuthFlowTest, AuthFlowFailure) {
+ scoped_ptr<TestGaiaWebAuthFlow> flow = CreateTestFlow();
+ flow->Start();
+ EXPECT_CALL(
+ delegate_,
+ OnGaiaFlowFailure(
+ GaiaWebAuthFlow::WINDOW_CLOSED,
+ GoogleServiceAuthError(GoogleServiceAuthError::NONE),
+ ""));
+ flow->OnAuthFlowFailure(WebAuthFlow::WINDOW_CLOSED);
+}
+
+} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/identity/gaia_web_auth_flow.cc ('k') | chrome/browser/extensions/api/identity/identity_api.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698