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

Unified Diff: chrome/browser/push_messaging/push_messaging_app_identifier.cc

Issue 1851423003: Make Web Push use InstanceID tokens instead of GCM registrations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@iid4default
Patch Set: Rebase Created 4 years, 3 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/push_messaging/push_messaging_app_identifier.cc
diff --git a/chrome/browser/push_messaging/push_messaging_app_identifier.cc b/chrome/browser/push_messaging/push_messaging_app_identifier.cc
index 812f00bf8961dcd47428250ea620cf5ae0290fa1..75bed68045171e58f2350bfebeacbcf660f1c85a 100644
--- a/chrome/browser/push_messaging/push_messaging_app_identifier.cc
+++ b/chrome/browser/push_messaging/push_messaging_app_identifier.cc
@@ -19,11 +19,13 @@
#include "components/prefs/scoped_user_pref_update.h"
const char kPushMessagingAppIdentifierPrefix[] = "wp:";
+const char kInstanceIDGuidSuffix[] = "-V2";
namespace {
// sizeof is strlen + 1 since it's null-terminated.
const size_t kPrefixLength = sizeof(kPushMessagingAppIdentifierPrefix) - 1;
+const size_t kGuidSuffixLength = sizeof(kInstanceIDGuidSuffix) - 1;
const char kSeparator = '#'; // Ok as only the origin of the url is used.
const size_t kGuidLength = 36; // "%08X-%04X-%04X-%04X-%012llX"
@@ -63,12 +65,21 @@ void PushMessagingAppIdentifier::RegisterProfilePrefs(
}
// static
+bool PushMessagingAppIdentifier::UseInstanceID(const std::string& app_id) {
+ return base::EndsWith(app_id, kInstanceIDGuidSuffix,
+ base::CompareCase::SENSITIVE);
+}
+
+// static
PushMessagingAppIdentifier PushMessagingAppIdentifier::Generate(
const GURL& origin,
int64_t service_worker_registration_id) {
// Use uppercase GUID for consistency with GUIDs Push has already sent to GCM.
// Also allows detecting case mangling; see code commented "crbug.com/461867".
std::string guid = base::ToUpperASCII(base::GenerateGUID());
+ // All new push subscriptions are Instance ID tokens.
+ guid.replace(guid.size() - kGuidSuffixLength, kGuidSuffixLength,
+ kInstanceIDGuidSuffix);
CHECK(!guid.empty());
std::string app_id =
kPushMessagingAppIdentifierPrefix + origin.spec() + kSeparator + guid;
@@ -196,6 +207,7 @@ void PushMessagingAppIdentifier::DeleteFromPrefs(Profile* profile) const {
}
void PushMessagingAppIdentifier::DCheckValid() const {
+#if DCHECK_IS_ON()
DCHECK_GE(service_worker_registration_id_, 0);
DCHECK(origin_.is_valid());
@@ -204,16 +216,29 @@ void PushMessagingAppIdentifier::DCheckValid() const {
// "wp:"
DCHECK_EQ(kPushMessagingAppIdentifierPrefix,
app_id_.substr(0, kPrefixLength));
+
// Optional (origin.spec() + '#')
if (app_id_.size() != kPrefixLength + kGuidLength) {
const size_t suffix_length = 1 /* kSeparator */ + kGuidLength;
- DCHECK(app_id_.size() > kPrefixLength + suffix_length);
+ DCHECK_GT(app_id_.size(), kPrefixLength + suffix_length);
DCHECK_EQ(origin_, GURL(app_id_.substr(
kPrefixLength,
app_id_.size() - kPrefixLength - suffix_length)));
DCHECK_EQ(std::string(1, kSeparator),
app_id_.substr(app_id_.size() - suffix_length, 1));
}
- // GUID
- DCHECK(base::IsValidGUID(app_id_.substr(app_id_.size() - kGuidLength)));
+
+ // GUID. In order to distinguish them, an app_id created for an InstanceID
+ // based subscription has the last few characters of the GUID overwritten with
+ // kInstanceIDGuidSuffix (which contains non-hex characters invalid in GUIDs).
+ std::string guid = app_id_.substr(app_id_.size() - kGuidLength);
+ if (UseInstanceID(app_id_)) {
+ DCHECK(!base::IsValidGUID(guid));
+
+ // Replace suffix with valid hex so we can validate the rest of the string.
+ guid = guid.replace(guid.size() - kGuidSuffixLength, kGuidSuffixLength,
+ kGuidSuffixLength, 'C');
+ }
+ DCHECK(base::IsValidGUID(guid));
+#endif // DCHECK_IS_ON()
}

Powered by Google App Engine
This is Rietveld 408576698