#include "base/sha1.h"
#include "base/strings/string_number_conversions.h"
-#include "chrome/browser/extensions/extension_system.h"
+#include "base/strings/string_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/services/gcm/gcm_profile_service.h"
#include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
#include "chrome/common/extensions/api/gcm.h"
#include "extensions/browser/event_router.h"
+#include "extensions/browser/extension_system.h"
#include "extensions/common/extension.h"
namespace {
const size_t kMaximumMessageSize = 4096; // in bytes.
+const char kCollapseKey[] = "collapse_key";
const char kGoogDotRestrictedPrefix[] = "goog.";
-const size_t kGoogDotPrefixLength = arraysize(kGoogDotRestrictedPrefix) - 1;
const char kGoogleRestrictedPrefix[] = "google";
-const size_t kGooglePrefixLength = arraysize(kGoogleRestrictedPrefix) - 1;
// Error messages.
const char kInvalidParameter[] =
"Function was called with invalid parameters.";
const char kNotSignedIn[] = "Profile was not signed in.";
+const char kCertificateMissing[] = "Manifest key was missing.";
const char kAsyncOperationPending[] =
"Asynchronous operation is pending.";
-const char kNetworkError[] = "Network error occured.";
-const char kServerError[] = "Server error occured.";
+const char kNetworkError[] = "Network error occurred.";
+const char kServerError[] = "Server error occurred.";
const char kTtlExceeded[] = "Time-to-live exceeded.";
-const char kUnknownError[] = "Unknown error occured.";
+const char kUnknownError[] = "Unknown error occurred.";
std::string SHA1HashHexString(const std::string& str) {
std::string hash = base::SHA1HashString(str);
return kInvalidParameter;
case gcm::GCMClient::NOT_SIGNED_IN:
return kNotSignedIn;
+ case gcm::GCMClient::CERTIFICATE_MISSING:
+ return kCertificateMissing;
case gcm::GCMClient::ASYNC_OPERATION_PENDING:
return kAsyncOperationPending;
case gcm::GCMClient::NETWORK_ERROR:
}
bool IsMessageKeyValid(const std::string& key) {
+ std::string lower = StringToLowerASCII(key);
return !key.empty() &&
- key.compare(0, kGooglePrefixLength, kGoogleRestrictedPrefix) != 0 &&
- key.compare(0, kGoogDotPrefixLength, kGoogDotRestrictedPrefix) != 0;
+ key.compare(0, arraysize(kCollapseKey) - 1, kCollapseKey) != 0 &&
+ lower.compare(0,
+ arraysize(kGoogleRestrictedPrefix) - 1,
+ kGoogleRestrictedPrefix) != 0 &&
+ lower.compare(0,
+ arraysize(kGoogDotRestrictedPrefix),
+ kGoogDotRestrictedPrefix) != 0;
}
} // namespace
bool GcmApiFunction::IsGcmApiEnabled() const {
return gcm::GCMProfileService::IsGCMEnabled(
- Profile::FromBrowserContext(context())) &&
- !GetExtension()->public_key().empty();
+ Profile::FromBrowserContext(context()));
}
gcm::GCMProfileService* GcmApiFunction::GCMProfileService() const {
api::gcm::Register::Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get());
+ if (GetExtension()->public_key().empty()) {
+ CompleteFunctionWithResult(std::string(),
+ gcm::GCMClient::CERTIFICATE_MISSING);
+ return false;
+ }
+
GCMProfileService()->Register(
GetExtension()->id(),
params->sender_ids,