OLD | NEW |
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 |
OLD | NEW |