summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/signin/signin_promo.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/signin/signin_promo.cc')
-rw-r--r--chromium/chrome/browser/signin/signin_promo.cc143
1 files changed, 143 insertions, 0 deletions
diff --git a/chromium/chrome/browser/signin/signin_promo.cc b/chromium/chrome/browser/signin/signin_promo.cc
new file mode 100644
index 00000000000..9315cb8a924
--- /dev/null
+++ b/chromium/chrome/browser/signin/signin_promo.cc
@@ -0,0 +1,143 @@
+// Copyright 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/signin/signin_promo.h"
+
+#include "base/strings/string_number_conversions.h"
+#include "build/chromeos_buildflags.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/google/google_brand.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/signin/account_consistency_mode_manager.h"
+#include "chrome/browser/signin/signin_promo_util.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/common/url_constants.h"
+#include "components/google/core/common/google_util.h"
+#include "components/pref_registry/pref_registry_syncable.h"
+#include "components/prefs/pref_service.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/storage_partition_config.h"
+#include "extensions/browser/guest_view/web_view/web_view_guest.h"
+#include "google_apis/gaia/gaia_urls.h"
+#include "net/base/url_util.h"
+#include "url/gurl.h"
+
+#if defined(OS_WIN)
+#include "base/win/windows_version.h"
+#endif
+
+namespace signin {
+
+const char kSignInPromoQueryKeyAccessPoint[] = "access_point";
+const char kSignInPromoQueryKeyAutoClose[] = "auto_close";
+const char kSignInPromoQueryKeyForceKeepData[] = "force_keep_data";
+const char kSignInPromoQueryKeyReason[] = "reason";
+
+#if !BUILDFLAG(IS_CHROMEOS_ASH)
+GURL GetEmbeddedPromoURL(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
+ bool auto_close) {
+ CHECK_LT(static_cast<int>(access_point),
+ static_cast<int>(signin_metrics::AccessPoint::ACCESS_POINT_MAX));
+ CHECK_NE(static_cast<int>(access_point),
+ static_cast<int>(signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN));
+ CHECK_LE(static_cast<int>(reason),
+ static_cast<int>(signin_metrics::Reason::kMaxValue));
+ CHECK_NE(static_cast<int>(reason),
+ static_cast<int>(signin_metrics::Reason::kUnknownReason));
+
+ GURL url(chrome::kChromeUIChromeSigninURL);
+ url = net::AppendQueryParameter(
+ url, signin::kSignInPromoQueryKeyAccessPoint,
+ base::NumberToString(static_cast<int>(access_point)));
+ url =
+ net::AppendQueryParameter(url, signin::kSignInPromoQueryKeyReason,
+ base::NumberToString(static_cast<int>(reason)));
+ if (auto_close) {
+ url = net::AppendQueryParameter(url, signin::kSignInPromoQueryKeyAutoClose,
+ "1");
+ }
+ return url;
+}
+
+GURL GetEmbeddedReauthURLWithEmail(signin_metrics::AccessPoint access_point,
+ signin_metrics::Reason reason,
+ const std::string& email) {
+ GURL url = GetEmbeddedPromoURL(access_point, reason, /*auto_close=*/true);
+ url = net::AppendQueryParameter(url, "email", email);
+ url = net::AppendQueryParameter(url, "validateEmail", "1");
+ return net::AppendQueryParameter(url, "readOnlyEmail", "1");
+}
+#endif // !BUILDFLAG(IS_CHROMEOS_ASH)
+
+GURL GetChromeSyncURLForDice(const std::string& email,
+ const std::string& continue_url) {
+ GURL url = GaiaUrls::GetInstance()->signin_chrome_sync_dice();
+ if (!email.empty())
+ url = net::AppendQueryParameter(url, "email_hint", email);
+ if (!continue_url.empty())
+ url = net::AppendQueryParameter(url, "continue", continue_url);
+ return url;
+}
+
+GURL GetAddAccountURLForDice(const std::string& email,
+ const std::string& continue_url) {
+ GURL url = GaiaUrls::GetInstance()->add_account_url();
+ if (!email.empty())
+ url = net::AppendQueryParameter(url, "Email", email);
+ if (!continue_url.empty())
+ url = net::AppendQueryParameter(url, "continue", continue_url);
+ return url;
+}
+
+content::StoragePartition* GetSigninPartition(
+ content::BrowserContext* browser_context) {
+ const auto signin_partition_config = content::StoragePartitionConfig::Create(
+ browser_context, "chrome-signin", /* partition_name= */ "",
+ /* in_memory= */ true);
+ return browser_context->GetStoragePartition(signin_partition_config);
+}
+
+signin_metrics::AccessPoint GetAccessPointForEmbeddedPromoURL(const GURL& url) {
+ std::string value;
+ if (!net::GetValueForKeyInQuery(url, kSignInPromoQueryKeyAccessPoint,
+ &value)) {
+ return signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN;
+ }
+
+ int access_point = -1;
+ base::StringToInt(value, &access_point);
+ if (access_point <
+ static_cast<int>(
+ signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE) ||
+ access_point >=
+ static_cast<int>(signin_metrics::AccessPoint::ACCESS_POINT_MAX)) {
+ return signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN;
+ }
+
+ return static_cast<signin_metrics::AccessPoint>(access_point);
+}
+
+signin_metrics::Reason GetSigninReasonForEmbeddedPromoURL(const GURL& url) {
+ std::string value;
+ if (!net::GetValueForKeyInQuery(url, kSignInPromoQueryKeyReason, &value))
+ return signin_metrics::Reason::kUnknownReason;
+
+ int reason = -1;
+ base::StringToInt(value, &reason);
+ if (reason <
+ static_cast<int>(signin_metrics::Reason::kSigninPrimaryAccount) ||
+ reason > static_cast<int>(signin_metrics::Reason::kMaxValue)) {
+ return signin_metrics::Reason::kUnknownReason;
+ }
+
+ return static_cast<signin_metrics::Reason>(reason);
+}
+
+void RegisterProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+ registry->RegisterIntegerPref(prefs::kDiceSigninUserMenuPromoCount, 0);
+}
+
+} // namespace signin