Commit b87824dd authored by Jonathan Mengedoht's avatar Jonathan Mengedoht Committed by Commit Bot

Extract WellKnownChangePassword logic and add until file

Bug: 927473
Change-Id: I4a215037fb51d17f6882f6459a01641a08149e7e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2339414Reviewed-by: default avatarVasilii Sukhanov <vasilii@chromium.org>
Commit-Queue: Jonathan Mengedoht <mengedoht@google.com>
Cr-Commit-Position: refs/heads/master@{#798132}
parent 3e3a2c60
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/password_manager/password_store_factory.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/api/passwords_private.h" #include "chrome/common/extensions/api/passwords_private.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "components/autofill/core/common/password_form.h" #include "components/autofill/core/common/password_form.h"
#include "components/keyed_service/core/service_access_type.h" #include "components/keyed_service/core/service_access_type.h"
...@@ -40,6 +39,7 @@ ...@@ -40,6 +39,7 @@
#include "components/password_manager/core/browser/ui/compromised_credentials_manager.h" #include "components/password_manager/core/browser/ui/compromised_credentials_manager.h"
#include "components/password_manager/core/browser/ui/credential_utils.h" #include "components/password_manager/core/browser/ui/credential_utils.h"
#include "components/password_manager/core/browser/ui/saved_passwords_presenter.h" #include "components/password_manager/core/browser/ui/saved_passwords_presenter.h"
#include "components/password_manager/core/browser/well_known_change_password_util.h"
#include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/core/common/password_manager_features.h"
#include "components/password_manager/core/common/password_manager_pref_names.h" #include "components/password_manager/core/common/password_manager_pref_names.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
...@@ -77,7 +77,7 @@ std::unique_ptr<std::string> GetChangePasswordUrl(const std::string& url) { ...@@ -77,7 +77,7 @@ std::unique_ptr<std::string> GetChangePasswordUrl(const std::string& url) {
} }
GURL origin = GURL(url).GetOrigin(); GURL origin = GURL(url).GetOrigin();
GURL::Replacements replacements; GURL::Replacements replacements;
replacements.SetPathStr(chrome::kWellKnownChangePasswordPath); replacements.SetPathStr(password_manager::kWellKnownChangePasswordPath);
return std::make_unique<std::string>( return std::make_unique<std::string>(
origin.ReplaceComponents(replacements).spec()); origin.ReplaceComponents(replacements).spec());
} }
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "chrome/browser/password_manager/bulk_leak_check_service_factory.h" #include "chrome/browser/password_manager/bulk_leak_check_service_factory.h"
#include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/password_manager/password_store_factory.h"
#include "chrome/common/extensions/api/passwords_private.h" #include "chrome/common/extensions/api/passwords_private.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
#include "components/password_manager/core/browser/bulk_leak_check_service.h" #include "components/password_manager/core/browser/bulk_leak_check_service.h"
...@@ -36,6 +35,7 @@ ...@@ -36,6 +35,7 @@
#include "components/password_manager/core/browser/leak_detection/leak_detection_delegate_interface.h" #include "components/password_manager/core/browser/leak_detection/leak_detection_delegate_interface.h"
#include "components/password_manager/core/browser/password_manager_test_utils.h" #include "components/password_manager/core/browser/password_manager_test_utils.h"
#include "components/password_manager/core/browser/test_password_store.h" #include "components/password_manager/core/browser/test_password_store.h"
#include "components/password_manager/core/browser/well_known_change_password_util.h"
#include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/core/common/password_manager_features.h"
#include "components/password_manager/core/common/password_manager_pref_names.h" #include "components/password_manager/core/common/password_manager_pref_names.h"
#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_registry_simple.h"
...@@ -1060,7 +1060,8 @@ TEST_F(PasswordCheckDelegateTest, ...@@ -1060,7 +1060,8 @@ TEST_F(PasswordCheckDelegateTest,
RunUntilIdle(); RunUntilIdle();
GURL change_password_url( GURL change_password_url(
*delegate().GetCompromisedCredentials().at(0).change_password_url); *delegate().GetCompromisedCredentials().at(0).change_password_url);
EXPECT_EQ(change_password_url.path(), chrome::kWellKnownChangePasswordPath); EXPECT_EQ(change_password_url.path(),
password_manager::kWellKnownChangePasswordPath);
} }
TEST_F(PasswordCheckDelegateTest, TEST_F(PasswordCheckDelegateTest,
...@@ -1085,7 +1086,7 @@ TEST_F(PasswordCheckDelegateTest, ...@@ -1085,7 +1086,7 @@ TEST_F(PasswordCheckDelegateTest,
EXPECT_EQ( EXPECT_EQ(
GURL(*delegate().GetCompromisedCredentials().at(1).change_password_url) GURL(*delegate().GetCompromisedCredentials().at(1).change_password_url)
.path(), .path(),
chrome::kWellKnownChangePasswordPath); password_manager::kWellKnownChangePasswordPath);
} }
TEST_F(PasswordCheckDelegateTest, TEST_F(PasswordCheckDelegateTest,
...@@ -1110,7 +1111,8 @@ TEST_F(PasswordCheckDelegateTest, ...@@ -1110,7 +1111,8 @@ TEST_F(PasswordCheckDelegateTest,
RunUntilIdle(); RunUntilIdle();
GURL change_password_url( GURL change_password_url(
*delegate().GetCompromisedCredentials().at(0).change_password_url); *delegate().GetCompromisedCredentials().at(0).change_password_url);
EXPECT_NE(change_password_url.path(), chrome::kWellKnownChangePasswordPath); EXPECT_NE(change_password_url.path(),
password_manager::kWellKnownChangePasswordPath);
} }
} // namespace extensions } // namespace extensions
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include "chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.h" #include "chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.h"
#include "base/logging.h" #include "base/logging.h"
#include "chrome/common/url_constants.h" #include "components/password_manager/core/browser/well_known_change_password_util.h"
#include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/core/common/password_manager_features.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
#include "content/public/browser/navigation_handle.h" #include "content/public/browser/navigation_handle.h"
...@@ -21,11 +21,13 @@ ...@@ -21,11 +21,13 @@
namespace { namespace {
using chrome::kWellKnownChangePasswordPath;
using chrome::kWellKnownNotExistingResourcePath;
using content::NavigationHandle; using content::NavigationHandle;
using content::NavigationThrottle; using content::NavigationThrottle;
using content::WebContents; using content::WebContents;
using password_manager::CreateWellKnownNonExistingResourceURL;
using password_manager::IsWellKnownChangePasswordUrl;
using password_manager::kWellKnownChangePasswordPath;
using password_manager::kWellKnownNotExistingResourcePath;
// Used to scope the posted navigation task to the lifetime of |web_contents|. // Used to scope the posted navigation task to the lifetime of |web_contents|.
class WebContentsLifetimeHelper class WebContentsLifetimeHelper
...@@ -53,22 +55,6 @@ class WebContentsLifetimeHelper ...@@ -53,22 +55,6 @@ class WebContentsLifetimeHelper
WEB_CONTENTS_USER_DATA_KEY_IMPL(WebContentsLifetimeHelper) WEB_CONTENTS_USER_DATA_KEY_IMPL(WebContentsLifetimeHelper)
bool IsWellKnownChangePasswordUrl(const GURL& url) {
if (!url.is_valid() || !url.has_path())
return false;
base::StringPiece path = url.PathForRequestPiece();
// remove trailing slash if there
if (path.ends_with("/"))
path = path.substr(0, path.size() - 1);
return path == kWellKnownChangePasswordPath;
}
GURL CreateNonExistingResourceURL(const GURL& url) {
GURL::Replacements replacement;
replacement.SetPathStr(kWellKnownNotExistingResourcePath);
return url.GetOrigin().ReplaceComponents(replacement);
}
} // namespace } // namespace
// static // static
...@@ -123,7 +109,8 @@ const char* WellKnownChangePasswordNavigationThrottle::GetNameForLogging() { ...@@ -123,7 +109,8 @@ const char* WellKnownChangePasswordNavigationThrottle::GetNameForLogging() {
void WellKnownChangePasswordNavigationThrottle::FetchNonExistingResource( void WellKnownChangePasswordNavigationThrottle::FetchNonExistingResource(
NavigationHandle* handle) { NavigationHandle* handle) {
auto resource_request = std::make_unique<network::ResourceRequest>(); auto resource_request = std::make_unique<network::ResourceRequest>();
resource_request->url = CreateNonExistingResourceURL(handle->GetURL()); resource_request->url =
CreateWellKnownNonExistingResourceURL(handle->GetURL());
resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit; resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
resource_request->load_flags = net::LOAD_DISABLE_CACHE; resource_request->load_flags = net::LOAD_DISABLE_CACHE;
net::NetworkTrafficAnnotationTag traffic_annotation = net::NetworkTrafficAnnotationTag traffic_annotation =
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator.h"
#include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/browser_navigator_params.h"
#include "chrome/common/url_constants.h" #include "chrome/common/url_constants.h"
#include "components/password_manager/core/browser/well_known_change_password_util.h"
#include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/core/common/password_manager_features.h"
#include "content/public/test/browser_test.h" #include "content/public/test/browser_test.h"
#include "content/public/test/mock_navigation_handle.h" #include "content/public/test/mock_navigation_handle.h"
...@@ -27,8 +28,6 @@ ...@@ -27,8 +28,6 @@
#include "url/gurl.h" #include "url/gurl.h"
namespace { namespace {
using chrome::kWellKnownChangePasswordPath;
using chrome::kWellKnownNotExistingResourcePath;
using content::NavigationThrottle; using content::NavigationThrottle;
using content::TestNavigationObserver; using content::TestNavigationObserver;
using net::test_server::BasicHttpResponse; using net::test_server::BasicHttpResponse;
...@@ -37,6 +36,8 @@ using net::test_server::EmbeddedTestServer; ...@@ -37,6 +36,8 @@ using net::test_server::EmbeddedTestServer;
using net::test_server::EmbeddedTestServerHandle; using net::test_server::EmbeddedTestServerHandle;
using net::test_server::HttpRequest; using net::test_server::HttpRequest;
using net::test_server::HttpResponse; using net::test_server::HttpResponse;
using password_manager::kWellKnownChangePasswordPath;
using password_manager::kWellKnownNotExistingResourcePath;
// ServerResponse describes how a server should respond to a given path. // ServerResponse describes how a server should respond to a given path.
struct ServerResponse { struct ServerResponse {
......
...@@ -277,12 +277,6 @@ const char kWhoIsMyAdministratorHelpURL[] = ...@@ -277,12 +277,6 @@ const char kWhoIsMyAdministratorHelpURL[] =
const char kChromeFlashRoadmapURL[] = "https://www.chromium.org/flash-roadmap/"; const char kChromeFlashRoadmapURL[] = "https://www.chromium.org/flash-roadmap/";
const char kWellKnownChangePasswordPath[] = "/.well-known/change-password";
const char kWellKnownNotExistingResourcePath[] =
"/.well-known/"
"resource-that-should-not-exist-whose-status-code-should-not-be-200";
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
const char kAndroidAppScheme[] = "android-app"; const char kAndroidAppScheme[] = "android-app";
#endif #endif
......
...@@ -240,15 +240,6 @@ extern const char kWhoIsMyAdministratorHelpURL[]; ...@@ -240,15 +240,6 @@ extern const char kWhoIsMyAdministratorHelpURL[];
// Link to the flash roadmap // Link to the flash roadmap
extern const char kChromeFlashRoadmapURL[]; extern const char kChromeFlashRoadmapURL[];
// Path for Well-Known change password url
// Spec: https://wicg.github.io/change-password-url/
extern const char kWellKnownChangePasswordPath[];
// This path should return 404. This enables us to check whether
// we can trust the server's Well-Known response codes.
// https://wicg.github.io/change-password-url/response-code-reliability.html#iana
extern const char kWellKnownNotExistingResourcePath[];
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
extern const char kAndroidAppScheme[]; extern const char kAndroidAppScheme[];
#endif #endif
......
...@@ -243,6 +243,8 @@ static_library("browser") { ...@@ -243,6 +243,8 @@ static_library("browser") {
"ui/saved_passwords_presenter.h", "ui/saved_passwords_presenter.h",
"votes_uploader.cc", "votes_uploader.cc",
"votes_uploader.h", "votes_uploader.h",
"well_known_change_password_util.cc",
"well_known_change_password_util.h",
] ]
all_dependent_configs = [ ":password_reuse_detection_config" ] all_dependent_configs = [ ":password_reuse_detection_config" ]
...@@ -629,6 +631,7 @@ source_set("unit_tests") { ...@@ -629,6 +631,7 @@ source_set("unit_tests") {
"ui/saved_passwords_presenter_unittest.cc", "ui/saved_passwords_presenter_unittest.cc",
"vote_uploads_test_matchers.h", "vote_uploads_test_matchers.h",
"votes_uploader_unittest.cc", "votes_uploader_unittest.cc",
"well_known_change_password_util_unittest.cc",
] ]
if (is_android) { if (is_android) {
sources += [ "password_scripts_fetcher_impl_unittests.cc" ] sources += [ "password_scripts_fetcher_impl_unittests.cc" ]
......
// Copyright 2020 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 "components/password_manager/core/browser/well_known_change_password_util.h"
#include "base/logging.h"
#include "url/gurl.h"
namespace password_manager {
const char kWellKnownChangePasswordPath[] = "/.well-known/change-password";
const char kWellKnownNotExistingResourcePath[] =
"/.well-known/"
"resource-that-should-not-exist-whose-status-code-should-not-be-200";
// .well-known/change-password is a defined standard that points to the sites
// change password form. https://wicg.github.io/change-password-url/
bool IsWellKnownChangePasswordUrl(const GURL& url) {
if (!url.is_valid() || !url.SchemeIsHTTPOrHTTPS() || !url.has_path())
return false;
base::StringPiece path = url.PathForRequestPiece();
// remove trailing slash if there
if (path.ends_with("/"))
path = path.substr(0, path.size() - 1);
return path == kWellKnownChangePasswordPath;
}
GURL CreateWellKnownNonExistingResourceURL(const GURL& url) {
GURL::Replacements replacement;
replacement.SetPathStr(kWellKnownNotExistingResourcePath);
return url.ReplaceComponents(replacement);
}
} // namespace password_manager
// Copyright 2020 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.
#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_WELL_KNOWN_CHANGE_PASSWORD_UTIL_H_
#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_WELL_KNOWN_CHANGE_PASSWORD_UTIL_H_
#include <memory>
class GURL;
namespace password_manager {
// Path for Well-Known change password url
// Spec: https://wicg.github.io/change-password-url/
extern const char kWellKnownChangePasswordPath[];
// This path should return 404. This enables us to check whether
// we can trust the server's Well-Known response codes.
// https://wicg.github.io/change-password-url/response-code-reliability.html#iana
extern const char kWellKnownNotExistingResourcePath[];
// .well-known/change-password is a defined standard that points to the sites
// change password form.
// https://wicg.github.io/change-password-url/
bool IsWellKnownChangePasswordUrl(const GURL& url);
// Creates a GURL for a given origin with |kWellKnownNotExistingResourcePath| as
// path.
GURL CreateWellKnownNonExistingResourceURL(const GURL& url);
} // namespace password_manager
#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_WELL_KNOWN_CHANGE_PASSWORD_UTIL_H_
\ No newline at end of file
// Copyright 2020 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 "components/password_manager/core/browser/well_known_change_password_util.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace password_manager {
TEST(WellKnownChangePasswordUtilTest, IsWellKnownChangePasswordUrl) {
EXPECT_TRUE(IsWellKnownChangePasswordUrl(
GURL("https://google.com/.well-known/change-password")));
EXPECT_TRUE(IsWellKnownChangePasswordUrl(
GURL("https://google.com/.well-known/change-password/")));
EXPECT_FALSE(IsWellKnownChangePasswordUrl(
GURL("https://google.com/.well-known/time")));
EXPECT_FALSE(IsWellKnownChangePasswordUrl(GURL("https://google.com/foo")));
EXPECT_FALSE(IsWellKnownChangePasswordUrl(GURL("chrome://settings/")));
EXPECT_FALSE(IsWellKnownChangePasswordUrl(GURL("mailto:?subject=test")));
}
TEST(WellKnownChangePasswordUtilTest, CreateWellKnownNonExistingResourceURL) {
EXPECT_EQ(CreateWellKnownNonExistingResourceURL(GURL("https://google.com")),
GURL("https://google.com/.well-known/"
"resource-that-should-not-exist-whose-status-code-should-not-"
"be-200"));
EXPECT_EQ(
CreateWellKnownNonExistingResourceURL(GURL("https://foo.google.com/bar")),
GURL("https://foo.google.com/.well-known/"
"resource-that-should-not-exist-whose-status-code-should-not-"
"be-200"));
}
} // namespace password_manager
\ No newline at end of file
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#include "base/logging.h" #include "base/logging.h"
#include "components/password_manager/core/browser/well_known_change_password_util.h"
#include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/core/common/password_manager_features.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#import "ios/web/public/navigation/navigation_context.h" #import "ios/web/public/navigation/navigation_context.h"
...@@ -17,19 +18,9 @@ ...@@ -17,19 +18,9 @@
#endif #endif
namespace { namespace {
using password_manager::WellKnownChangePasswordTabHelper;
// .well-known/change-password is a defined standard that points to the sites
// change password form. https://wicg.github.io/change-password-url/
bool IsWellKnownChangePasswordUrl(const GURL& url) {
return url.SchemeIsHTTPOrHTTPS() &&
(url.path() == "/.well-known/change-password" ||
url.path() == "/.well-known/change-password/");
}
} }
namespace password_manager {
WellKnownChangePasswordTabHelper::WellKnownChangePasswordTabHelper( WellKnownChangePasswordTabHelper::WellKnownChangePasswordTabHelper(
web::WebState* web_state) web::WebState* web_state)
: web::WebStatePolicyDecider(web_state), web_state_(web_state) { : web::WebStatePolicyDecider(web_state), web_state_(web_state) {
...@@ -90,5 +81,3 @@ void WellKnownChangePasswordTabHelper::WebStateDestroyed( ...@@ -90,5 +81,3 @@ void WellKnownChangePasswordTabHelper::WebStateDestroyed(
} }
WEB_STATE_USER_DATA_KEY_IMPL(WellKnownChangePasswordTabHelper) WEB_STATE_USER_DATA_KEY_IMPL(WellKnownChangePasswordTabHelper)
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment