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

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

Issue 14081014: Identity API: Change WebAuthFlow to use <webview> instead of a normal browser pop-up. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: chrome.identity side-by-side with chrome.experimental.identity 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/identity_apitest.cc
diff --git a/chrome/browser/extensions/api/identity/identity_apitest.cc b/chrome/browser/extensions/api/identity/identity_apitest.cc
index 4ed81b8a8ee6453c714c45866cb157dc1fa3ea2c..ea4f90ef4e11fe453a38a66e0a6cd964968e420f 100644
--- a/chrome/browser/extensions/api/identity/identity_apitest.cc
+++ b/chrome/browser/extensions/api/identity/identity_apitest.cc
@@ -6,13 +6,15 @@
#include "base/stringprintf.h"
#include "base/values.h"
#include "chrome/browser/extensions/api/identity/identity_api.h"
-#include "chrome/browser/extensions/api/identity/web_auth_flow.h"
+#include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/extensions/extension_function_test_utils.h"
+#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/common/chrome_notification_types.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/api/identity/oauth2_manifest_handler.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "content/public/browser/notification_service.h"
@@ -22,6 +24,8 @@
#include "google_apis/gaia/google_service_auth_error.h"
#include "google_apis/gaia/oauth2_mint_token_flow.h"
#include "googleurl/src/gurl.h"
+#include "grit/browser_resources.h"
+#include "net/test/spawned_test_server.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -917,42 +921,89 @@ IN_PROC_BROWSER_TEST_F(RemoveCachedAuthTokenFunctionTest, MatchingToken) {
}
class LaunchWebAuthFlowFunctionTest : public AsyncExtensionBrowserTest {
+ public:
+ void LoadComponent() {
+ // Normally the ComponentLoader won't load the component in tests.
+ ExtensionService* service = extensions::ExtensionSystem::Get(
+ profile())->extension_service();
+
+ service->component_loader()->Add(
+ IDR_IDENTITY_API_UI_MANIFEST,
+ base::FilePath(FILE_PATH_LITERAL("identity_api_ui")));
+ }
+
+ virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+ // Reduce performance test variance by disabling background networking.
+ command_line->AppendSwitch(switches::kDisableBackgroundNetworking);
+ }
};
IN_PROC_BROWSER_TEST_F(LaunchWebAuthFlowFunctionTest, UserCloseWindow) {
- content::WindowedNotificationObserver observer(
- chrome::NOTIFICATION_BROWSER_WINDOW_READY,
- content::NotificationService::AllSources());
+ LoadComponent();
+ net::SpawnedTestServer https_server(
+ net::SpawnedTestServer::TYPE_HTTPS,
+ net::SpawnedTestServer::kLocalhost,
+ base::FilePath(FILE_PATH_LITERAL(
+ "chrome/test/data/extensions/api_test/identity")));
+ ASSERT_TRUE(https_server.Start());
+ GURL auth_url(https_server.GetURL("files/interaction_required.html"));
scoped_refptr<IdentityLaunchWebAuthFlowFunction> function(
new IdentityLaunchWebAuthFlowFunction());
+ scoped_refptr<Extension> empty_extension(
+ utils::CreateEmptyExtension());
+ function->set_extension(empty_extension.get());
- RunFunctionAsync(
- function, "[{\"interactive\": true, \"url\": \"data:text/html,auth\"}]");
-
- observer.Wait();
- Browser* web_auth_flow_browser =
- content::Source<Browser>(observer.source()).ptr();
- web_auth_flow_browser->window()->Close();
+ std::string args = "[{\"interactive\": true, \"url\": \"" +
+ auth_url.spec() + "\"}]";
+ RunFunctionAsync(function, args);
+
+ GURL last_loaded;
+ content::NavigationController* web_auth_flow_controller;
+ do {
+ content::WindowedNotificationObserver observer(
+ content::NOTIFICATION_LOAD_STOP,
+ content::NotificationService::AllSources());
+ observer.Wait();
+ web_auth_flow_controller =
+ content::Source<content::NavigationController>(observer.source()).ptr();
+ last_loaded = web_auth_flow_controller->GetWebContents()->GetURL();
+ } while (last_loaded != auth_url);
+ if (web_auth_flow_controller->GetWebContents()->GetEmbedderWebContents())
+ web_auth_flow_controller->GetWebContents()->GetEmbedderWebContents()->
+ Close();
+ else
+ web_auth_flow_controller->GetWebContents()->Close();
EXPECT_EQ(std::string(errors::kUserRejected), WaitForError(function));
}
IN_PROC_BROWSER_TEST_F(LaunchWebAuthFlowFunctionTest, InteractionRequired) {
+ LoadComponent();
+ net::SpawnedTestServer https_server(
+ net::SpawnedTestServer::TYPE_HTTPS,
+ net::SpawnedTestServer::kLocalhost,
+ base::FilePath(FILE_PATH_LITERAL(
+ "chrome/test/data/extensions/api_test/identity")));
+ ASSERT_TRUE(https_server.Start());
+ GURL auth_url(https_server.GetURL("files/interaction_required.html"));
+
scoped_refptr<IdentityLaunchWebAuthFlowFunction> function(
new IdentityLaunchWebAuthFlowFunction());
scoped_refptr<Extension> empty_extension(
utils::CreateEmptyExtension());
function->set_extension(empty_extension.get());
- std::string error = utils::RunFunctionAndReturnError(
- function, "[{\"interactive\": false, \"url\": \"data:text/html,auth\"}]",
- browser());
+ std::string args = "[{\"interactive\": false, \"url\": \"" +
+ auth_url.spec() + "\"}]";
+ std::string error = utils::RunFunctionAndReturnError(function, args,
+ browser());
EXPECT_EQ(std::string(errors::kInteractionRequired), error);
}
IN_PROC_BROWSER_TEST_F(LaunchWebAuthFlowFunctionTest, NonInteractiveSuccess) {
+ LoadComponent();
scoped_refptr<IdentityLaunchWebAuthFlowFunction> function(
new IdentityLaunchWebAuthFlowFunction());
scoped_refptr<Extension> empty_extension(
@@ -974,6 +1025,7 @@ IN_PROC_BROWSER_TEST_F(LaunchWebAuthFlowFunctionTest, NonInteractiveSuccess) {
IN_PROC_BROWSER_TEST_F(
LaunchWebAuthFlowFunctionTest, InteractiveFirstNavigationSuccess) {
+ LoadComponent();
scoped_refptr<IdentityLaunchWebAuthFlowFunction> function(
new IdentityLaunchWebAuthFlowFunction());
scoped_refptr<Extension> empty_extension(
@@ -995,6 +1047,15 @@ IN_PROC_BROWSER_TEST_F(
IN_PROC_BROWSER_TEST_F(
LaunchWebAuthFlowFunctionTest, InteractiveSecondNavigationSuccess) {
+ LoadComponent();
+ net::SpawnedTestServer https_server(
+ net::SpawnedTestServer::TYPE_HTTPS,
+ net::SpawnedTestServer::kLocalhost,
+ base::FilePath(FILE_PATH_LITERAL(
+ "chrome/test/data/extensions/api_test/identity")));
+ ASSERT_TRUE(https_server.Start());
+ GURL auth_url(https_server.GetURL("files/redirect_to_chromiumapp.html"));
+
scoped_refptr<IdentityLaunchWebAuthFlowFunction> function(
new IdentityLaunchWebAuthFlowFunction());
scoped_refptr<Extension> empty_extension(
@@ -1002,12 +1063,10 @@ IN_PROC_BROWSER_TEST_F(
function->set_extension(empty_extension.get());
function->InitFinalRedirectURLPrefixesForTest("abcdefghij");
+ std::string args = "[{\"interactive\": true, \"url\": \"" +
+ auth_url.spec() + "\"}]";
scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult(
- function,
- "[{\"interactive\": true,"
- "\"url\": \"data:text/html,<script>window.location.replace('"
- "https://abcdefghij.chromiumapp.org/callback#test')</script>\"}]",
- browser()));
+ function, args, browser()));
std::string url;
EXPECT_TRUE(value->GetAsString(&url));
« no previous file with comments | « chrome/browser/extensions/api/identity/identity_api.cc ('k') | chrome/browser/extensions/api/identity/web_auth_flow.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698