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

Side by Side Diff: chrome/browser/extensions/extension_settings_api.cc

Issue 7189029: Implement an initial extension settings API. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Change where extension settings are saved, update TODO, api test Created 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/values.h"
6 #include "chrome/browser/extensions/extension_service.h"
7 #include "chrome/browser/extensions/extension_settings_api.h"
8 #include "chrome/browser/profiles/profile.h"
9
10 // GetStorageCallback
11
12 SettingsFunction::GetStorageCallback::GetStorageCallback(
13 SettingsFunction* settings_function)
14 : settings_function_(settings_function) {
15 }
16
17 SettingsFunction::GetStorageCallback::~GetStorageCallback() {
18 }
19
20 void SettingsFunction::GetStorageCallback::Run(
21 ExtensionSettingsStorage* storage) {
22 // Mimic how RunImpl() is handled in extensions code.
23 if (!settings_function_->RunWithStorage(storage)) {
24 settings_function_->SendResponse(false);
25 }
26 }
27
28 // StorageResultCallback
29
30 SettingsFunction::StorageResultCallback::StorageResultCallback(
31 SettingsFunction* settings_function)
32 : settings_function_(settings_function) {
33 }
34
35 SettingsFunction::StorageResultCallback::~StorageResultCallback() {
36 }
37
38 void SettingsFunction::StorageResultCallback::OnSuccess(
39 DictionaryValue* settings) {
40 settings_function_->result_.reset(settings);
41 settings_function_->SendResponse(true);
42 }
43
44 void SettingsFunction::StorageResultCallback::OnFailure(
45 const std::string& message) {
46 settings_function_->error_ = message;
47 settings_function_->SendResponse(false);
48 }
49
50 // SettingsFunction
51
52 bool SettingsFunction::RunImpl() {
53 profile()->GetExtensionService()->extension_settings()->GetStorage(
54 extension_id(), new GetStorageCallback(this));
55 return true;
56 }
57
58 // Concrete settings functions
59
60 bool GetSettingsFunction::RunWithStorage(ExtensionSettingsStorage* storage) {
61 Value *input;
62 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &input));
63
64 std::string as_string;
65 ListValue* as_list;
66 if (input->IsType(Value::TYPE_NULL)) {
67 storage->Get(new StorageResultCallback(this));
68 } else if (input->GetAsString(&as_string)) {
69 storage->Get(as_string, new StorageResultCallback(this));
70 } else if (input->GetAsList(&as_list)) {
71 storage->Get(*as_list, new StorageResultCallback(this));
72 } else {
73 error_ = "Unsupported argument type";
Mihai Parparita -not on Chrome 2011/06/21 23:40:11 Errors are generally put in constants.
not at google - send to devlin 2011/06/22 09:40:38 Done.
74 return false;
75 }
76
77 return true;
78 }
79
80 bool SetSettingsFunction::RunWithStorage(ExtensionSettingsStorage* storage) {
81 DictionaryValue *input;
82 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &input));
83 storage->Set(*input, new StorageResultCallback(this));
84 return true;
85 }
86
87 bool RemoveSettingsFunction::RunWithStorage(ExtensionSettingsStorage* storage) {
88 Value *input;
89 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &input));
90
91 std::string as_string;
92 ListValue* as_list;
93 if (input->GetAsString(&as_string)) {
94 storage->Remove(as_string, new StorageResultCallback(this));
95 } else if (input->GetAsList(&as_list)) {
96 storage->Remove(*as_list, new StorageResultCallback(this));
97 } else {
98 error_ = "Unsupported argument type";
99 return false;
100 }
101
102 return true;
103 }
104
105 bool ClearSettingsFunction::RunWithStorage(ExtensionSettingsStorage* storage) {
106 storage->Clear(new StorageResultCallback(this));
107 return true;
108 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698