| 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
|
|
|