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

Unified Diff: extensions/browser/api/lock_screen_data/lock_screen_data_api.cc

Issue 2934293003: The chrome.lockScreen.data API implementation (Closed)
Patch Set: switch to BackendTaskRunner Created 3 years, 5 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: 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

Powered by Google App Engine
This is Rietveld 408576698