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

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

Issue 2934293003: The chrome.lockScreen.data API implementation (Closed)
Patch Set: remove FilePath*UTF8Unsafe methods Created 3 years, 6 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..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

Powered by Google App Engine
This is Rietveld 408576698