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

Unified Diff: chrome/browser/prerender/prerender_browsertest.cc

Issue 2447143002: Stop prerendering of a site if it uses the Credential Manager API. (Closed)
Patch Set: rebase Created 4 years, 2 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/prerender/prerender_browsertest.cc
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 11f9d761bdf6f969df4331365f313084cfcd2d8f..e51954071cd4d2354ab157ff0fcfb340d2d1f9ac 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -40,6 +40,7 @@
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/external_protocol/external_protocol_handler.h"
#include "chrome/browser/net/prediction_options.h"
+#include "chrome/browser/password_manager/password_store_factory.h"
#include "chrome/browser/predictors/autocomplete_action_predictor.h"
#include "chrome/browser/predictors/autocomplete_action_predictor_factory.h"
#include "chrome/browser/prerender/prerender_contents.h"
@@ -72,6 +73,9 @@
#include "components/omnibox/browser/omnibox_edit_model.h"
#include "components/omnibox/browser/omnibox_popup_model.h"
#include "components/omnibox/browser/omnibox_view.h"
+#include "components/password_manager/core/browser/password_bubble_experiment.h"
+#include "components/password_manager/core/browser/password_manager_test_utils.h"
+#include "components/password_manager/core/browser/test_password_store.h"
#include "components/safe_browsing_db/database_manager.h"
#include "components/safe_browsing_db/util.h"
#include "components/variations/entropy_provider.h"
@@ -3189,6 +3193,45 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, HttpPost) {
EXPECT_EQ("text=value\n", body);
}
+// Prerenders a page that tries to automatically sign user in via the Credential
+// Manager API. The page should be killed.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, AutosigninInPrerenderer) {
+ // Set up a credential in the password store.
+ PasswordStoreFactory::GetInstance()->SetTestingFactory(
+ current_browser()->profile(),
+ password_manager::BuildPasswordStore<
+ content::BrowserContext, password_manager::TestPasswordStore>);
+ scoped_refptr<password_manager::TestPasswordStore> password_store =
+ static_cast<password_manager::TestPasswordStore*>(
+ PasswordStoreFactory::GetForProfile(
+ current_browser()->profile(),
+ ServiceAccessType::IMPLICIT_ACCESS).get());
+ autofill::PasswordForm signin_form;
+ signin_form.signon_realm = embedded_test_server()->base_url().spec();
+ signin_form.password_value = base::ASCIIToUTF16("password");
+ signin_form.username_value = base::ASCIIToUTF16("user");
+ signin_form.origin = embedded_test_server()->base_url();
+ signin_form.skip_zero_click = false;
+ password_store->AddLogin(signin_form);
+ // Enable 'auto signin' for the profile.
+ password_bubble_experiment::RecordAutoSignInPromptFirstRunExperienceWasShown(
+ browser()->profile()->GetPrefs());
+
+ // Intercept the successful landing page where a signed in user ends up.
+ // It should never load as the API is suppressed.
+ GURL done_url = embedded_test_server()->GetURL("/password/done.html");
+ base::FilePath empty_file = ui_test_utils::GetTestFilePath(
+ base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html")));
+ RequestCounter done_counter;
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&CreateCountingInterceptorOnIO,
+ done_url, empty_file, done_counter.AsWeakPtr()));
+ PrerenderTestURL("/password/autosignin.html",
+ FINAL_STATUS_CREDENTIAL_MANAGER_API, 0);
+ EXPECT_EQ(0, done_counter.count());
+}
+
class PrerenderIncognitoBrowserTest : public PrerenderBrowserTest {
public:
void SetUpOnMainThread() override {
« no previous file with comments | « chrome/browser/password_manager/chrome_password_manager_client.cc ('k') | chrome/browser/prerender/prerender_final_status.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698