Index: chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc |
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc |
index 36f9283b4a0e4dbbd71882617c918418abc923b6..b38fb915f4cc39833c8a1163ced311a547e1b7c3 100644 |
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc |
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc |
@@ -22,6 +22,7 @@ |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/common/pref_names.h" |
+#include "chrome/common/url_constants.h" |
#include "chrome/test/base/in_process_browser_test.h" |
#include "chrome/test/base/ui_test_utils.h" |
#include "components/autofill/content/browser/risk/proto/fingerprint.pb.h" |
@@ -41,6 +42,7 @@ |
#include "content/public/common/url_constants.h" |
#include "content/public/test/browser_test_utils.h" |
#include "content/public/test/test_utils.h" |
+#include "google_apis/gaia/google_service_auth_error.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/WebKit/public/web/WebInputEvent.h" |
@@ -104,6 +106,10 @@ class TestAutofillDialogController : public AutofillDialogControllerImpl { |
virtual ~TestAutofillDialogController() {} |
virtual GURL SignInUrl() const OVERRIDE { |
+ return GURL(chrome::kChromeUIVersionURL); |
+ } |
+ |
+ GURL SignInContinueUrl() const { |
return GURL(content::kAboutBlankURL); |
} |
@@ -186,7 +192,7 @@ class TestAutofillDialogController : public AutofillDialogControllerImpl { |
} |
virtual bool IsSignInContinueUrl(const GURL& url) const OVERRIDE { |
- return true; |
+ return url == SignInContinueUrl(); |
} |
private: |
@@ -898,44 +904,63 @@ IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, |
EXPECT_EQ(last_four, test_generated_bubble_controller()->backing_card_name()); |
} |
-// See http://crbug.com/314627 |
-#if defined(OS_WIN) |
-#define MAYBE_SignInNoCrash DISABLED_SignInNoCrash |
-#else |
-#define MAYBE_SignInNoCrash SignInNoCrash |
-#endif |
- |
-// Simulates the user successfully signing in to the dialog for the first time. |
-// The controller listens for nav entry commits and should not destroy the web |
-// contents before its post load code runs (which would cause a crash). |
-IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, MAYBE_SignInNoCrash) { |
+// Simulates the user signing in to the dialog from the inline web contents. |
+IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, SimulateSuccessfulSignIn) { |
browser()->profile()->GetPrefs()->SetBoolean( |
::prefs::kAutofillDialogPayWithoutWallet, |
true); |
InitializeController(); |
- const AccountChooserModel& account_chooser_model = |
- controller()->AccountChooserModelForTesting(); |
- EXPECT_FALSE(account_chooser_model.WalletIsSelected()); |
+ controller()->OnDidFetchWalletCookieValue(std::string()); |
+ controller()->OnUserNameFetchFailure(GoogleServiceAuthError( |
+ GoogleServiceAuthError::USER_NOT_SIGNED_UP)); |
+ controller()->OnDidGetWalletItems( |
+ wallet::GetTestWalletItemsWithRequiredAction(wallet::GAIA_AUTH)); |
- ui_test_utils::UrlLoadObserver observer( |
+ ui_test_utils::UrlLoadObserver sign_in_page_observer( |
controller()->SignInUrl(), |
content::NotificationService::AllSources()); |
+ // Simulate a user clicking "Sign In" (which loads dialog's web contents). |
controller()->SignInLinkClicked(); |
- std::vector<std::string> usernames(1, "user@example.com"); |
- controller()->OnUserNameFetchSuccess(usernames); |
- controller()->OnDidFetchWalletCookieValue(std::string()); |
- controller()->OnDidGetWalletItems( |
- wallet::GetTestWalletItemsWithRequiredAction(wallet::GAIA_AUTH)); |
+ EXPECT_TRUE(controller()->ShouldShowSignInWebView()); |
TestableAutofillDialogView* view = controller()->GetTestableView(); |
- EXPECT_TRUE(view->GetSignInWebContents()); |
- EXPECT_TRUE(controller()->ShouldShowSignInWebView()); |
- observer.Wait(); |
+ content::WebContents* sign_in_contents = view->GetSignInWebContents(); |
+ ASSERT_TRUE(sign_in_contents); |
+ |
+ sign_in_page_observer.Wait(); |
+ |
+ ui_test_utils::UrlLoadObserver continue_page_observer( |
+ controller()->SignInContinueUrl(), |
+ content::NotificationService::AllSources()); |
+ |
+ EXPECT_EQ(sign_in_contents->GetURL(), controller()->SignInUrl()); |
+ |
+ const AccountChooserModel& account_chooser_model = |
+ controller()->AccountChooserModelForTesting(); |
+ EXPECT_FALSE(account_chooser_model.WalletIsSelected()); |
+ |
+ sign_in_contents->GetController().LoadURL( |
+ controller()->SignInContinueUrl(), |
+ content::Referrer(), |
+ content::PAGE_TRANSITION_FORM_SUBMIT, |
+ std::string()); |
+ |
+ EXPECT_CALL(*controller()->GetTestingWalletClient(), GetWalletItems()); |
+ continue_page_observer.Wait(); |
+ content::RunAllPendingInMessageLoop(); |
+ |
+ EXPECT_FALSE(controller()->ShouldShowSignInWebView()); |
+ |
+ controller()->OnDidGetWalletItems( |
+ wallet::GetTestWalletItems(wallet::AMEX_DISALLOWED)); |
+ std::vector<std::string> usernames(1, "user@example.com"); |
+ controller()->OnUserNameFetchSuccess(usernames); |
- // Wallet should now be selected and Chrome shouldn't have crashed. |
+ // Wallet should now be selected and Chrome shouldn't have crashed (which can |
+ // happen if the WebContents is deleted while proccessing a nav entry commit). |
EXPECT_TRUE(account_chooser_model.WalletIsSelected()); |
} |