| 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..6679ae43a3a191d7c9811c8289d1a0d68a747cc8 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,20 +4,62 @@
|
|
|
| #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/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:
|
| + case lock_screen_data::OperationResult::kPending:
|
| + NOTREACHED() << "Expected a failure code.";
|
| + return "Unknown";
|
| + case lock_screen_data::OperationResult::kFailed:
|
| + return "Unknown";
|
| + case lock_screen_data::OperationResult::kFileCreationFailed:
|
| + case lock_screen_data::OperationResult::kFileWriteFailed:
|
| + case lock_screen_data::OperationResult::kFileReadFailed:
|
| + case lock_screen_data::OperationResult::kFileDeleteFailed:
|
| + return "Internal - file operation";
|
| + case lock_screen_data::OperationResult::kInvalidKey:
|
| + case lock_screen_data::OperationResult::kWrongKey:
|
| + return "Internal - encryption";
|
| + case lock_screen_data::OperationResult::kNotFound:
|
| + return "Not found";
|
| + case lock_screen_data::OperationResult::kNoBackingFile:
|
| + return "Not initialized";
|
| + }
|
| + NOTREACHED() << "Unknown operation status";
|
| + return "Unknown";
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| LockScreenDataCreateFunction::LockScreenDataCreateFunction() {}
|
|
|
| LockScreenDataCreateFunction::~LockScreenDataCreateFunction() {}
|
|
|
| ExtensionFunction::ResponseAction LockScreenDataCreateFunction::Run() {
|
| + if (!lock_screen_data::ItemStorage::Get(browser_context()))
|
| + return RespondNow(Error("Not available"));
|
| +
|
| + const lock_screen_data::DataItem* item =
|
| + lock_screen_data::ItemStorage::Get(browser_context())
|
| + ->CreateItem(extension_id());
|
| + if (!item)
|
| + return RespondNow(Error("Creation failed"));
|
| +
|
| api::lock_screen_data::DataItemInfo item_info;
|
| - item_info.id = "fake";
|
| + item_info.id = item->id();
|
| return RespondNow(
|
| ArgumentList(api::lock_screen_data::Create::Results::Create(item_info)));
|
| }
|
| @@ -27,7 +69,22 @@ LockScreenDataGetAllFunction::LockScreenDataGetAllFunction() {}
|
| LockScreenDataGetAllFunction::~LockScreenDataGetAllFunction() {}
|
|
|
| ExtensionFunction::ResponseAction LockScreenDataGetAllFunction::Run() {
|
| + if (!lock_screen_data::ItemStorage::Get(browser_context()))
|
| + return RespondNow(Error("Not available"));
|
| +
|
| + std::vector<const lock_screen_data::DataItem*> items =
|
| + lock_screen_data::ItemStorage::Get(browser_context())
|
| + ->GetAllForExtension(extension_id());
|
| +
|
| std::vector<api::lock_screen_data::DataItemInfo> items_info;
|
| + 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));
|
| + }
|
| +
|
| return RespondNow(
|
| ArgumentList(api::lock_screen_data::GetAll::Results::Create(items_info)));
|
| }
|
| @@ -37,11 +94,37 @@ LockScreenDataGetContentFunction::LockScreenDataGetContentFunction() {}
|
| LockScreenDataGetContentFunction::~LockScreenDataGetContentFunction() {}
|
|
|
| ExtensionFunction::ResponseAction LockScreenDataGetContentFunction::Run() {
|
| + if (!lock_screen_data::ItemStorage::Get(browser_context()))
|
| + 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"));
|
| + lock_screen_data::OperationResult result =
|
| + lock_screen_data::ItemStorage::Get(browser_context())
|
| + ->GetItemContent(
|
| + extension_id(), params->id,
|
| + base::Bind(&LockScreenDataGetContentFunction::OnDone, this));
|
| + if (result == lock_screen_data::OperationResult::kPending)
|
| + return RespondLater();
|
| + if (result == lock_screen_data::OperationResult::kNoBackingFile) {
|
| + return RespondNow(
|
| + ArgumentList(api::lock_screen_data::GetContent::Results::Create(
|
| + std::vector<char>())));
|
| + }
|
| + return RespondNow(Error(GetErrorString(result)));
|
| +}
|
| +
|
| +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() {}
|
| @@ -49,11 +132,30 @@ LockScreenDataSetContentFunction::LockScreenDataSetContentFunction() {}
|
| LockScreenDataSetContentFunction::~LockScreenDataSetContentFunction() {}
|
|
|
| ExtensionFunction::ResponseAction LockScreenDataSetContentFunction::Run() {
|
| + if (!lock_screen_data::ItemStorage::Get(browser_context()))
|
| + return RespondNow(Error("Not available"));
|
| +
|
| std::unique_ptr<api::lock_screen_data::SetContent::Params> params(
|
| api::lock_screen_data::SetContent::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params.get());
|
|
|
| - return RespondNow(Error("Not found"));
|
| + lock_screen_data::OperationResult result =
|
| + lock_screen_data::ItemStorage::Get(browser_context())
|
| + ->SetItemContent(
|
| + extension_id(), params->id, params->data,
|
| + base::Bind(&LockScreenDataSetContentFunction::OnDone, this));
|
| + if (result == lock_screen_data::OperationResult::kPending)
|
| + return RespondLater();
|
| + return RespondNow(Error(GetErrorString(result)));
|
| +}
|
| +
|
| +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 +166,13 @@ 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::OperationResult result =
|
| + lock_screen_data::ItemStorage::Get(browser_context())
|
| + ->DeleteItem(extension_id(), params->id);
|
| + if (result == lock_screen_data::OperationResult::kSuccess)
|
| + return RespondNow(NoArguments());
|
| + return RespondNow(Error(GetErrorString(result)));
|
| }
|
|
|
| } // namespace extensions
|
|
|