| Index: extensions/browser/api/lock_screen_data/lock_screen_data_api.cc
|
| diff --git a/extensions/browser/api/lock_screen_data/lock_screen_data_api.cc b/extensions/browser/api/lock_screen_data/lock_screen_data_api.cc
|
| index 87943dfacb8015caf3a88339750868978d9889ed..ad4fd78124aba77b489e8e51ce48777fc56b7e26 100644
|
| --- a/extensions/browser/api/lock_screen_data/lock_screen_data_api.cc
|
| +++ b/extensions/browser/api/lock_screen_data/lock_screen_data_api.cc
|
| @@ -4,21 +4,70 @@
|
|
|
| #include "extensions/browser/api/lock_screen_data/lock_screen_data_api.h"
|
|
|
| -#include <memory>
|
| +#include <string>
|
| +#include <utility>
|
| #include <vector>
|
|
|
| +#include "extensions/browser/api/lock_screen_data/data_item.h"
|
| +#include "extensions/browser/api/lock_screen_data/lock_screen_item_storage.h"
|
| +#include "extensions/browser/api/lock_screen_data/operation_result.h"
|
| #include "extensions/common/api/lock_screen_data.h"
|
|
|
| namespace extensions {
|
|
|
| +namespace {
|
| +
|
| +std::string GetErrorString(lock_screen_data::OperationResult result) {
|
| + switch (result) {
|
| + case lock_screen_data::OperationResult::kSuccess:
|
| + NOTREACHED() << "Expected a failure code.";
|
| + return "Unknown";
|
| + case lock_screen_data::OperationResult::kFailed:
|
| + return "Unknown";
|
| + case lock_screen_data::OperationResult::kInvalidKey:
|
| + case lock_screen_data::OperationResult::kWrongKey:
|
| + return "Internal - encryption";
|
| + case lock_screen_data::OperationResult::kAlreadyRegistered:
|
| + return "Duplicate item";
|
| + case lock_screen_data::OperationResult::kNotFound:
|
| + case lock_screen_data::OperationResult::kUnknownExtension:
|
| + return "Not found";
|
| + }
|
| + NOTREACHED() << "Unknown operation status";
|
| + return "Unknown";
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| LockScreenDataCreateFunction::LockScreenDataCreateFunction() {}
|
|
|
| LockScreenDataCreateFunction::~LockScreenDataCreateFunction() {}
|
|
|
| ExtensionFunction::ResponseAction LockScreenDataCreateFunction::Run() {
|
| + lock_screen_data::LockScreenItemStorage* storage =
|
| + lock_screen_data::LockScreenItemStorage::GetIfAllowed(browser_context());
|
| + if (!storage) {
|
| + LOG(ERROR) << "Attempt to create data item from context which cannot use "
|
| + << "lock screen data item storage: " << source_context_type();
|
| + return RespondNow(Error("Not available"));
|
| + }
|
| +
|
| + storage->CreateItem(extension_id(),
|
| + base::Bind(&LockScreenDataCreateFunction::OnDone, this));
|
| + return RespondLater();
|
| +}
|
| +
|
| +void LockScreenDataCreateFunction::OnDone(
|
| + lock_screen_data::OperationResult result,
|
| + const lock_screen_data::DataItem* item) {
|
| + if (result != lock_screen_data::OperationResult::kSuccess) {
|
| + Respond(Error(GetErrorString(result)));
|
| + return;
|
| + }
|
| +
|
| api::lock_screen_data::DataItemInfo item_info;
|
| - item_info.id = "fake";
|
| - return RespondNow(
|
| + item_info.id = item->id();
|
| + Respond(
|
| ArgumentList(api::lock_screen_data::Create::Results::Create(item_info)));
|
| }
|
|
|
| @@ -27,8 +76,28 @@ LockScreenDataGetAllFunction::LockScreenDataGetAllFunction() {}
|
| LockScreenDataGetAllFunction::~LockScreenDataGetAllFunction() {}
|
|
|
| ExtensionFunction::ResponseAction LockScreenDataGetAllFunction::Run() {
|
| + lock_screen_data::LockScreenItemStorage* storage =
|
| + lock_screen_data::LockScreenItemStorage::GetIfAllowed(browser_context());
|
| + if (!storage)
|
| + return RespondNow(Error("Not available"));
|
| +
|
| + storage->GetAllForExtension(
|
| + extension_id(), base::Bind(&LockScreenDataGetAllFunction::OnDone, this));
|
| + return RespondLater();
|
| +}
|
| +
|
| +void LockScreenDataGetAllFunction::OnDone(
|
| + const std::vector<const lock_screen_data::DataItem*>& items) {
|
| std::vector<api::lock_screen_data::DataItemInfo> items_info;
|
| - return RespondNow(
|
| + for (auto* const item : items) {
|
| + if (!item)
|
| + continue;
|
| + api::lock_screen_data::DataItemInfo item_info;
|
| + item_info.id = item->id();
|
| + items_info.emplace_back(std::move(item_info));
|
| + }
|
| +
|
| + Respond(
|
| ArgumentList(api::lock_screen_data::GetAll::Results::Create(items_info)));
|
| }
|
|
|
| @@ -37,11 +106,30 @@ LockScreenDataGetContentFunction::LockScreenDataGetContentFunction() {}
|
| LockScreenDataGetContentFunction::~LockScreenDataGetContentFunction() {}
|
|
|
| ExtensionFunction::ResponseAction LockScreenDataGetContentFunction::Run() {
|
| + lock_screen_data::LockScreenItemStorage* storage =
|
| + lock_screen_data::LockScreenItemStorage::GetIfAllowed(browser_context());
|
| + if (!storage)
|
| + return RespondNow(Error("Not available"));
|
| +
|
| std::unique_ptr<api::lock_screen_data::GetContent::Params> params(
|
| api::lock_screen_data::GetContent::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params.get());
|
|
|
| - return RespondNow(Error("Not found"));
|
| + storage->GetItemContent(
|
| + extension_id(), params->id,
|
| + base::Bind(&LockScreenDataGetContentFunction::OnDone, this));
|
| + return RespondLater();
|
| +}
|
| +
|
| +void LockScreenDataGetContentFunction::OnDone(
|
| + lock_screen_data::OperationResult result,
|
| + std::unique_ptr<std::vector<char>> data) {
|
| + if (result == lock_screen_data::OperationResult::kSuccess) {
|
| + Respond(ArgumentList(
|
| + api::lock_screen_data::GetContent::Results::Create(*data)));
|
| + return;
|
| + }
|
| + Respond(Error(GetErrorString(result)));
|
| }
|
|
|
| LockScreenDataSetContentFunction::LockScreenDataSetContentFunction() {}
|
| @@ -53,7 +141,24 @@ ExtensionFunction::ResponseAction LockScreenDataSetContentFunction::Run() {
|
| api::lock_screen_data::SetContent::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params.get());
|
|
|
| - return RespondNow(Error("Not found"));
|
| + lock_screen_data::LockScreenItemStorage* storage =
|
| + lock_screen_data::LockScreenItemStorage::GetIfAllowed(browser_context());
|
| + if (!storage)
|
| + return RespondNow(Error("Not available"));
|
| +
|
| + storage->SetItemContent(
|
| + extension_id(), params->id, params->data,
|
| + base::Bind(&LockScreenDataSetContentFunction::OnDone, this));
|
| + return RespondLater();
|
| +}
|
| +
|
| +void LockScreenDataSetContentFunction::OnDone(
|
| + lock_screen_data::OperationResult result) {
|
| + if (result == lock_screen_data::OperationResult::kSuccess) {
|
| + Respond(NoArguments());
|
| + return;
|
| + }
|
| + Respond(Error(GetErrorString(result)));
|
| }
|
|
|
| LockScreenDataDeleteFunction::LockScreenDataDeleteFunction() {}
|
| @@ -64,7 +169,24 @@ ExtensionFunction::ResponseAction LockScreenDataDeleteFunction::Run() {
|
| std::unique_ptr<api::lock_screen_data::Delete::Params> params(
|
| api::lock_screen_data::Delete::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params.get());
|
| - return RespondNow(Error("Not found."));
|
| +
|
| + lock_screen_data::LockScreenItemStorage* storage =
|
| + lock_screen_data::LockScreenItemStorage::GetIfAllowed(browser_context());
|
| + if (!storage)
|
| + return RespondNow(Error("Not available"));
|
| +
|
| + storage->DeleteItem(extension_id(), params->id,
|
| + base::Bind(&LockScreenDataDeleteFunction::OnDone, this));
|
| + return RespondLater();
|
| +}
|
| +
|
| +void LockScreenDataDeleteFunction::OnDone(
|
| + lock_screen_data::OperationResult result) {
|
| + if (result == lock_screen_data::OperationResult::kSuccess) {
|
| + Respond(NoArguments());
|
| + return;
|
| + }
|
| + Respond(Error(GetErrorString(result)));
|
| }
|
|
|
| } // namespace extensions
|
|
|