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

Unified Diff: chrome/browser/extensions/api/instance_id/instance_id_api.cc

Issue 1128123003: Implement InstanceID API functions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 5 years, 7 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/extensions/api/instance_id/instance_id_api.cc
diff --git a/chrome/browser/extensions/api/instance_id/instance_id_api.cc b/chrome/browser/extensions/api/instance_id/instance_id_api.cc
index fc76fa98e22306ad9afebcfdb2b9de4d1daf36f6..4c15782874a8f49e740a6a09f0a222d4050e68e4 100644
--- a/chrome/browser/extensions/api/instance_id/instance_id_api.cc
+++ b/chrome/browser/extensions/api/instance_id/instance_id_api.cc
@@ -5,53 +5,179 @@
#include "chrome/browser/extensions/api/instance_id/instance_id_api.h"
#include "base/logging.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/services/gcm/instance_id/instance_id_profile_service.h"
+#include "chrome/browser/services/gcm/instance_id/instance_id_profile_service_factory.h"
+#include "chrome/common/extensions/api/instance_id.h"
+#include "components/gcm_driver/instance_id/instance_id_driver.h"
#include "extensions/common/extension.h"
namespace extensions {
+namespace {
+
+// Error messages.
+const char kInvalidParameter[] = "Function was called with invalid parameters.";
+const char kDisabled[] = "Instance ID is currently disabled.";
+const char kNetworkError[] = "Network error occurred.";
+const char kServerError[] = "Server error occurred.";
+const char kUnknownError[] = "Unknown error occurred.";
+
+const char* InstanceIDResultToError(instance_id::InstanceID::Result result) {
+ switch (result) {
+ case instance_id::InstanceID::INVALID_PARAMETER:
+ return kInvalidParameter;
+ case instance_id::InstanceID::DISABLED:
+ return kDisabled;
+ case instance_id::InstanceID::NETWORK_ERROR:
+ return kNetworkError;
+ case instance_id::InstanceID::SERVER_ERROR:
+ return kServerError;
+ case instance_id::InstanceID::UNKNOWN_ERROR:
+ return kUnknownError;
+ default:
+ NOTREACHED() << "Unexpected value of result cannot be converted: "
+ << result;
+ }
+ return "";
+}
+
+} // namespace
+
+InstanceIDApiFunction::InstanceIDApiFunction() {
+}
+
+InstanceIDApiFunction::~InstanceIDApiFunction() {
+}
+
+ExtensionFunction::ResponseAction InstanceIDApiFunction::Run() {
+ if (Profile::FromBrowserContext(browser_context())->IsOffTheRecord()) {
+ return RespondNow(Error(
+ "chrome.instanceID not supported in incognito mode"));
+ }
+
+ if (!IsEnabled()) {
+ return RespondNow(Error(
+ InstanceIDResultToError(instance_id::InstanceID::DISABLED)));
+ }
+
+ return DoWork();
+}
+
+bool InstanceIDApiFunction::IsEnabled() const {
+ Profile* profile = Profile::FromBrowserContext(browser_context());
+
+ return instance_id::InstanceIDProfileService::IsInstanceIDEnabled(profile);
+}
+
+instance_id::InstanceID* InstanceIDApiFunction::GetInstanceID() const {
+ return instance_id::InstanceIDProfileServiceFactory::GetForProfile(
+ Profile::FromBrowserContext(browser_context()))->driver()->
+ GetInstanceID(extension()->id());
+}
+
InstanceIDGetIDFunction::InstanceIDGetIDFunction() {}
InstanceIDGetIDFunction::~InstanceIDGetIDFunction() {}
-ExtensionFunction::ResponseAction InstanceIDGetIDFunction::Run() {
- NOTIMPLEMENTED();
- return RespondLater();
+ExtensionFunction::ResponseAction InstanceIDGetIDFunction::DoWork() {
+ return RespondNow(
+ OneArgument(new base::StringValue(GetInstanceID()->GetID())));
}
InstanceIDGetCreationTimeFunction::InstanceIDGetCreationTimeFunction() {}
InstanceIDGetCreationTimeFunction::~InstanceIDGetCreationTimeFunction() {}
-ExtensionFunction::ResponseAction InstanceIDGetCreationTimeFunction::Run() {
- NOTIMPLEMENTED();
- return RespondLater();
+ExtensionFunction::ResponseAction InstanceIDGetCreationTimeFunction::DoWork() {
+ return RespondNow(OneArgument(
+ new base::FundamentalValue(
+ GetInstanceID()->GetCreationTime().ToDoubleT())));
}
InstanceIDGetTokenFunction::InstanceIDGetTokenFunction() {}
InstanceIDGetTokenFunction::~InstanceIDGetTokenFunction() {}
-ExtensionFunction::ResponseAction InstanceIDGetTokenFunction::Run() {
- NOTIMPLEMENTED();
+ExtensionFunction::ResponseAction InstanceIDGetTokenFunction::DoWork() {
+ scoped_ptr<api::instance_id::GetToken::Params> params =
+ api::instance_id::GetToken::Params::Create(*args_);
+ EXTENSION_FUNCTION_VALIDATE(params.get());
+
+ std::map<std::string, std::string> options;
+ if (params->get_token_params.options.get()) {
+ base::DictionaryValue::Iterator iter(
+ params->get_token_params.options->additional_properties);
+ for (; !iter.IsAtEnd(); iter.Advance()) {
+ const base::StringValue* string_value = NULL;
+ if (!iter.value().GetAsString(&string_value)) {
+ return RespondNow(Error(InstanceIDResultToError(
+ instance_id::InstanceID::INVALID_PARAMETER)));
+ }
+ options[iter.key()] = string_value->GetString();
+ }
+ }
+
+ GetInstanceID()->GetToken(
+ params->get_token_params.authorized_entity,
+ params->get_token_params.scope,
+ options,
+ base::Bind(&InstanceIDGetTokenFunction::GetTokenCompleted, this));
+
return RespondLater();
}
+void InstanceIDGetTokenFunction::GetTokenCompleted(
+ const std::string& token,
+ instance_id::InstanceID::Result result) {
+ if (result == instance_id::InstanceID::SUCCESS)
+ Respond(OneArgument(new base::StringValue(token)));
+ else
+ Respond(Error(InstanceIDResultToError(result)));
+}
+
InstanceIDDeleteTokenFunction::InstanceIDDeleteTokenFunction() {}
InstanceIDDeleteTokenFunction::~InstanceIDDeleteTokenFunction() {}
-ExtensionFunction::ResponseAction InstanceIDDeleteTokenFunction::Run() {
- NOTIMPLEMENTED();
+ExtensionFunction::ResponseAction InstanceIDDeleteTokenFunction::DoWork() {
+ scoped_ptr<api::instance_id::DeleteToken::Params> params =
+ api::instance_id::DeleteToken::Params::Create(*args_);
+ EXTENSION_FUNCTION_VALIDATE(params.get());
+
+ GetInstanceID()->DeleteToken(
+ params->delete_token_params.authorized_entity,
+ params->delete_token_params.scope,
+ base::Bind(&InstanceIDDeleteTokenFunction::DeleteTokenCompleted, this));
+
return RespondLater();
}
+void InstanceIDDeleteTokenFunction::DeleteTokenCompleted(
+ instance_id::InstanceID::Result result) {
+ if (result == instance_id::InstanceID::SUCCESS)
+ Respond(NoArguments());
+ else
+ Respond(Error(InstanceIDResultToError(result)));
+}
+
InstanceIDDeleteIDFunction::InstanceIDDeleteIDFunction() {}
InstanceIDDeleteIDFunction::~InstanceIDDeleteIDFunction() {}
-ExtensionFunction::ResponseAction InstanceIDDeleteIDFunction::Run() {
- NOTIMPLEMENTED();
+ExtensionFunction::ResponseAction InstanceIDDeleteIDFunction::DoWork() {
+ GetInstanceID()->DeleteID(
+ base::Bind(&InstanceIDDeleteIDFunction::DeleteIDCompleted, this));
+
return RespondLater();
}
+void InstanceIDDeleteIDFunction::DeleteIDCompleted(
+ instance_id::InstanceID::Result result) {
+ if (result == instance_id::InstanceID::SUCCESS)
+ Respond(NoArguments());
+ else
+ Respond(Error(InstanceIDResultToError(result)));
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698