X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fchrome%2Fbrowser%2Fextensions%2Fapi%2Fgcm%2Fgcm_api.cc;h=a8a5be20d4d07d333fbb44ceb1b196262f64d172;hb=ff3e2503a20db9193d323c1d19c38c68004dec4a;hp=2034c40d5a2a2f458b2e390e5ee236fb84240170;hpb=7338fba38ba696536d1cc9d389afd716a6ab2fe6;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/chrome/browser/extensions/api/gcm/gcm_api.cc b/src/chrome/browser/extensions/api/gcm/gcm_api.cc index 2034c40..a8a5be2 100644 --- a/src/chrome/browser/extensions/api/gcm/gcm_api.cc +++ b/src/chrome/browser/extensions/api/gcm/gcm_api.cc @@ -10,33 +10,34 @@ #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); @@ -51,6 +52,8 @@ const char* GcmResultToError(gcm::GCMClient::Result result) { 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: @@ -71,9 +74,15 @@ const char* GcmResultToError(gcm::GCMClient::Result result) { } 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 @@ -89,8 +98,7 @@ bool GcmApiFunction::RunImpl() { bool GcmApiFunction::IsGcmApiEnabled() const { return gcm::GCMProfileService::IsGCMEnabled( - Profile::FromBrowserContext(context())) && - !GetExtension()->public_key().empty(); + Profile::FromBrowserContext(context())); } gcm::GCMProfileService* GcmApiFunction::GCMProfileService() const { @@ -107,6 +115,12 @@ bool GcmRegisterFunction::DoWork() { 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,