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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/api/lock_screen_data/lock_screen_data_api.h" 5 #include "extensions/browser/api/lock_screen_data/lock_screen_data_api.h"
6 6
7 #include <memory> 7 #include <string>
8 #include <utility>
8 #include <vector> 9 #include <vector>
9 10
11 #include "extensions/browser/api/lock_screen_data/data_item.h"
12 #include "extensions/browser/api/lock_screen_data/item_storage.h"
13 #include "extensions/browser/api/lock_screen_data/operation_result.h"
10 #include "extensions/common/api/lock_screen_data.h" 14 #include "extensions/common/api/lock_screen_data.h"
11 15
12 namespace extensions { 16 namespace extensions {
13 17
18 namespace {
19
20 std::string GetErrorString(lock_screen_data::OperationResult result) {
21 switch (result) {
22 case lock_screen_data::OperationResult::kSuccess:
23 case lock_screen_data::OperationResult::kPending:
24 NOTREACHED() << "Expected a failure code.";
25 return "Unknown";
26 case lock_screen_data::OperationResult::kFailed:
27 return "Unknown";
28 case lock_screen_data::OperationResult::kFileCreationFailed:
29 case lock_screen_data::OperationResult::kFileWriteFailed:
30 case lock_screen_data::OperationResult::kFileReadFailed:
31 case lock_screen_data::OperationResult::kFileDeleteFailed:
32 return "Internal - file operation";
33 case lock_screen_data::OperationResult::kInvalidKey:
34 case lock_screen_data::OperationResult::kWrongKey:
35 return "Internal - encryption";
36 case lock_screen_data::OperationResult::kNotFound:
37 return "Not found";
38 case lock_screen_data::OperationResult::kNoBackingFile:
39 return "Not initialized";
40 }
41 NOTREACHED() << "Unknown operation status";
42 return "Unknown";
43 }
44
45 } // namespace
46
14 LockScreenDataCreateFunction::LockScreenDataCreateFunction() {} 47 LockScreenDataCreateFunction::LockScreenDataCreateFunction() {}
15 48
16 LockScreenDataCreateFunction::~LockScreenDataCreateFunction() {} 49 LockScreenDataCreateFunction::~LockScreenDataCreateFunction() {}
17 50
18 ExtensionFunction::ResponseAction LockScreenDataCreateFunction::Run() { 51 ExtensionFunction::ResponseAction LockScreenDataCreateFunction::Run() {
52 if (!lock_screen_data::ItemStorage::Get(browser_context()))
53 return RespondNow(Error("Not available"));
54
55 const lock_screen_data::DataItem* item =
56 lock_screen_data::ItemStorage::Get(browser_context())
57 ->CreateItem(extension_id());
58 if (!item)
59 return RespondNow(Error("Creation failed"));
60
19 api::lock_screen_data::DataItemInfo item_info; 61 api::lock_screen_data::DataItemInfo item_info;
20 item_info.id = "fake"; 62 item_info.id = item->id();
21 return RespondNow( 63 return RespondNow(
22 ArgumentList(api::lock_screen_data::Create::Results::Create(item_info))); 64 ArgumentList(api::lock_screen_data::Create::Results::Create(item_info)));
23 } 65 }
24 66
25 LockScreenDataGetAllFunction::LockScreenDataGetAllFunction() {} 67 LockScreenDataGetAllFunction::LockScreenDataGetAllFunction() {}
26 68
27 LockScreenDataGetAllFunction::~LockScreenDataGetAllFunction() {} 69 LockScreenDataGetAllFunction::~LockScreenDataGetAllFunction() {}
28 70
29 ExtensionFunction::ResponseAction LockScreenDataGetAllFunction::Run() { 71 ExtensionFunction::ResponseAction LockScreenDataGetAllFunction::Run() {
72 if (!lock_screen_data::ItemStorage::Get(browser_context()))
73 return RespondNow(Error("Not available"));
74
75 std::vector<const lock_screen_data::DataItem*> items =
76 lock_screen_data::ItemStorage::Get(browser_context())
77 ->GetAllForExtension(extension_id());
78
30 std::vector<api::lock_screen_data::DataItemInfo> items_info; 79 std::vector<api::lock_screen_data::DataItemInfo> items_info;
80 for (auto* const item : items) {
81 if (!item)
82 continue;
83 api::lock_screen_data::DataItemInfo item_info;
84 item_info.id = item->id();
85 items_info.emplace_back(std::move(item_info));
86 }
87
31 return RespondNow( 88 return RespondNow(
32 ArgumentList(api::lock_screen_data::GetAll::Results::Create(items_info))); 89 ArgumentList(api::lock_screen_data::GetAll::Results::Create(items_info)));
33 } 90 }
34 91
35 LockScreenDataGetContentFunction::LockScreenDataGetContentFunction() {} 92 LockScreenDataGetContentFunction::LockScreenDataGetContentFunction() {}
36 93
37 LockScreenDataGetContentFunction::~LockScreenDataGetContentFunction() {} 94 LockScreenDataGetContentFunction::~LockScreenDataGetContentFunction() {}
38 95
39 ExtensionFunction::ResponseAction LockScreenDataGetContentFunction::Run() { 96 ExtensionFunction::ResponseAction LockScreenDataGetContentFunction::Run() {
97 if (!lock_screen_data::ItemStorage::Get(browser_context()))
98 return RespondNow(Error("Not available"));
99
40 std::unique_ptr<api::lock_screen_data::GetContent::Params> params( 100 std::unique_ptr<api::lock_screen_data::GetContent::Params> params(
41 api::lock_screen_data::GetContent::Params::Create(*args_)); 101 api::lock_screen_data::GetContent::Params::Create(*args_));
42 EXTENSION_FUNCTION_VALIDATE(params.get()); 102 EXTENSION_FUNCTION_VALIDATE(params.get());
43 103
44 return RespondNow(Error("Not found")); 104 lock_screen_data::OperationResult result =
105 lock_screen_data::ItemStorage::Get(browser_context())
106 ->GetItemContent(
107 extension_id(), params->id,
108 base::Bind(&LockScreenDataGetContentFunction::OnDone, this));
109 if (result == lock_screen_data::OperationResult::kPending)
110 return RespondLater();
111 if (result == lock_screen_data::OperationResult::kNoBackingFile) {
112 return RespondNow(
113 ArgumentList(api::lock_screen_data::GetContent::Results::Create(
114 std::vector<char>())));
115 }
116 return RespondNow(Error(GetErrorString(result)));
117 }
118
119 void LockScreenDataGetContentFunction::OnDone(
120 lock_screen_data::OperationResult result,
121 std::unique_ptr<std::vector<char>> data) {
122 if (result == lock_screen_data::OperationResult::kSuccess) {
123 Respond(ArgumentList(
124 api::lock_screen_data::GetContent::Results::Create(*data)));
125 return;
126 }
127 Respond(Error(GetErrorString(result)));
45 } 128 }
46 129
47 LockScreenDataSetContentFunction::LockScreenDataSetContentFunction() {} 130 LockScreenDataSetContentFunction::LockScreenDataSetContentFunction() {}
48 131
49 LockScreenDataSetContentFunction::~LockScreenDataSetContentFunction() {} 132 LockScreenDataSetContentFunction::~LockScreenDataSetContentFunction() {}
50 133
51 ExtensionFunction::ResponseAction LockScreenDataSetContentFunction::Run() { 134 ExtensionFunction::ResponseAction LockScreenDataSetContentFunction::Run() {
135 if (!lock_screen_data::ItemStorage::Get(browser_context()))
136 return RespondNow(Error("Not available"));
137
52 std::unique_ptr<api::lock_screen_data::SetContent::Params> params( 138 std::unique_ptr<api::lock_screen_data::SetContent::Params> params(
53 api::lock_screen_data::SetContent::Params::Create(*args_)); 139 api::lock_screen_data::SetContent::Params::Create(*args_));
54 EXTENSION_FUNCTION_VALIDATE(params.get()); 140 EXTENSION_FUNCTION_VALIDATE(params.get());
55 141
56 return RespondNow(Error("Not found")); 142 lock_screen_data::OperationResult result =
143 lock_screen_data::ItemStorage::Get(browser_context())
144 ->SetItemContent(
145 extension_id(), params->id, params->data,
146 base::Bind(&LockScreenDataSetContentFunction::OnDone, this));
147 if (result == lock_screen_data::OperationResult::kPending)
148 return RespondLater();
149 return RespondNow(Error(GetErrorString(result)));
150 }
151
152 void LockScreenDataSetContentFunction::OnDone(
153 lock_screen_data::OperationResult result) {
154 if (result == lock_screen_data::OperationResult::kSuccess) {
155 Respond(NoArguments());
156 return;
157 }
158 Respond(Error(GetErrorString(result)));
57 } 159 }
58 160
59 LockScreenDataDeleteFunction::LockScreenDataDeleteFunction() {} 161 LockScreenDataDeleteFunction::LockScreenDataDeleteFunction() {}
60 162
61 LockScreenDataDeleteFunction::~LockScreenDataDeleteFunction() {} 163 LockScreenDataDeleteFunction::~LockScreenDataDeleteFunction() {}
62 164
63 ExtensionFunction::ResponseAction LockScreenDataDeleteFunction::Run() { 165 ExtensionFunction::ResponseAction LockScreenDataDeleteFunction::Run() {
64 std::unique_ptr<api::lock_screen_data::Delete::Params> params( 166 std::unique_ptr<api::lock_screen_data::Delete::Params> params(
65 api::lock_screen_data::Delete::Params::Create(*args_)); 167 api::lock_screen_data::Delete::Params::Create(*args_));
66 EXTENSION_FUNCTION_VALIDATE(params.get()); 168 EXTENSION_FUNCTION_VALIDATE(params.get());
67 return RespondNow(Error("Not found.")); 169
170 lock_screen_data::OperationResult result =
171 lock_screen_data::ItemStorage::Get(browser_context())
172 ->DeleteItem(extension_id(), params->id);
173 if (result == lock_screen_data::OperationResult::kSuccess)
174 return RespondNow(NoArguments());
175 return RespondNow(Error(GetErrorString(result)));
68 } 176 }
69 177
70 } // namespace extensions 178 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698