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

Side by Side Diff: extensions/browser/api/alarms/alarms_api.cc

Issue 789643004: Move chrome.alarms API from chrome/ to extensions/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/extensions/api/alarms/alarms_api.h" 5 #include "extensions/browser/api/alarms/alarms_api.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/time/clock.h" 8 #include "base/time/clock.h"
9 #include "base/time/default_clock.h" 9 #include "base/time/default_clock.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "chrome/browser/extensions/api/alarms/alarm_manager.h" 11 #include "extensions/browser/api/alarms/alarm_manager.h"
12 #include "chrome/common/extensions/api/alarms.h" 12 #include "extensions/common/api/alarms.h"
13 #include "extensions/common/error_utils.h" 13 #include "extensions/common/error_utils.h"
14 14
15 namespace alarms = extensions::api::alarms; 15 namespace extensions {
16 16
17 namespace extensions { 17 namespace alarms = core_api::alarms;
18 18
19 namespace { 19 namespace {
20 20
21 const char kDefaultAlarmName[] = ""; 21 const char kDefaultAlarmName[] = "";
22 const char kBothRelativeAndAbsoluteTime[] = 22 const char kBothRelativeAndAbsoluteTime[] =
23 "Cannot set both when and delayInMinutes."; 23 "Cannot set both when and delayInMinutes.";
24 const char kNoScheduledTime[] = 24 const char kNoScheduledTime[] =
25 "Must set at least one of when, delayInMinutes, or periodInMinutes."; 25 "Must set at least one of when, delayInMinutes, or periodInMinutes.";
26 const int kReleaseDelayMinimum = 1; 26 const int kReleaseDelayMinimum = 1;
27 const int kDevDelayMinimum = 0; 27 const int kDevDelayMinimum = 0;
28 28
29 bool ValidateAlarmCreateInfo(const std::string& alarm_name, 29 bool ValidateAlarmCreateInfo(const std::string& alarm_name,
30 const alarms::AlarmCreateInfo& create_info, 30 const alarms::AlarmCreateInfo& create_info,
31 const Extension* extension, 31 const Extension* extension,
32 std::string* error, 32 std::string* error,
33 std::vector<std::string>* warnings) { 33 std::vector<std::string>* warnings) {
34 if (create_info.delay_in_minutes.get() && 34 if (create_info.delay_in_minutes.get() && create_info.when.get()) {
35 create_info.when.get()) {
36 *error = kBothRelativeAndAbsoluteTime; 35 *error = kBothRelativeAndAbsoluteTime;
37 return false; 36 return false;
38 } 37 }
39 if (create_info.delay_in_minutes == NULL && 38 if (create_info.delay_in_minutes == NULL && create_info.when == NULL &&
40 create_info.when == NULL &&
41 create_info.period_in_minutes == NULL) { 39 create_info.period_in_minutes == NULL) {
42 *error = kNoScheduledTime; 40 *error = kNoScheduledTime;
43 return false; 41 return false;
44 } 42 }
45 43
46 // Users can always use an absolute timeout to request an arbitrarily-short or 44 // Users can always use an absolute timeout to request an arbitrarily-short or
47 // negative delay. We won't honor the short timeout, but we can't check it 45 // negative delay. We won't honor the short timeout, but we can't check it
48 // and warn the user because it would introduce race conditions (say they 46 // and warn the user because it would introduce race conditions (say they
49 // compute a long-enough timeout, but then the call into the alarms interface 47 // compute a long-enough timeout, but then the call into the alarms interface
50 // gets delayed past the boundary). However, it's still worth warning about 48 // gets delayed past the boundary). However, it's still worth warning about
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 alarm_name)); 81 alarm_name));
84 } 82 }
85 } 83 }
86 84
87 return true; 85 return true;
88 } 86 }
89 87
90 } // namespace 88 } // namespace
91 89
92 AlarmsCreateFunction::AlarmsCreateFunction() 90 AlarmsCreateFunction::AlarmsCreateFunction()
93 : clock_(new base::DefaultClock()), owns_clock_(true) {} 91 : clock_(new base::DefaultClock()), owns_clock_(true) {
92 }
94 93
95 AlarmsCreateFunction::AlarmsCreateFunction(base::Clock* clock) 94 AlarmsCreateFunction::AlarmsCreateFunction(base::Clock* clock)
96 : clock_(clock), owns_clock_(false) {} 95 : clock_(clock), owns_clock_(false) {
96 }
97 97
98 AlarmsCreateFunction::~AlarmsCreateFunction() { 98 AlarmsCreateFunction::~AlarmsCreateFunction() {
99 if (owns_clock_) 99 if (owns_clock_)
100 delete clock_; 100 delete clock_;
101 } 101 }
102 102
103 bool AlarmsCreateFunction::RunAsync() { 103 bool AlarmsCreateFunction::RunAsync() {
104 scoped_ptr<alarms::Create::Params> params( 104 scoped_ptr<alarms::Create::Params> params(
105 alarms::Create::Params::Create(*args_)); 105 alarms::Create::Params::Create(*args_));
106 EXTENSION_FUNCTION_VALIDATE(params.get()); 106 EXTENSION_FUNCTION_VALIDATE(params.get());
107 const std::string& alarm_name = 107 const std::string& alarm_name =
108 params->name.get() ? *params->name : kDefaultAlarmName; 108 params->name.get() ? *params->name : kDefaultAlarmName;
109 std::vector<std::string> warnings; 109 std::vector<std::string> warnings;
110 if (!ValidateAlarmCreateInfo( 110 if (!ValidateAlarmCreateInfo(alarm_name, params->alarm_info, extension(),
111 alarm_name, params->alarm_info, extension(), &error_, &warnings)) { 111 &error_, &warnings)) {
112 return false; 112 return false;
113 } 113 }
114 for (std::vector<std::string>::const_iterator it = warnings.begin(); 114 for (std::vector<std::string>::const_iterator it = warnings.begin();
115 it != warnings.end(); ++it) 115 it != warnings.end(); ++it)
116 WriteToConsole(content::CONSOLE_MESSAGE_LEVEL_WARNING, *it); 116 WriteToConsole(content::CONSOLE_MESSAGE_LEVEL_WARNING, *it);
117 117
118 Alarm alarm(alarm_name, 118 Alarm alarm(alarm_name, params->alarm_info,
119 params->alarm_info,
120 base::TimeDelta::FromMinutes( 119 base::TimeDelta::FromMinutes(
121 Manifest::IsUnpackedLocation(extension()->location()) 120 Manifest::IsUnpackedLocation(extension()->location())
122 ? kDevDelayMinimum 121 ? kDevDelayMinimum
123 : kReleaseDelayMinimum), 122 : kReleaseDelayMinimum),
124 clock_->Now()); 123 clock_->Now());
125 AlarmManager::Get(browser_context())->AddAlarm( 124 AlarmManager::Get(browser_context())
126 extension_id(), alarm, base::Bind(&AlarmsCreateFunction::Callback, this)); 125 ->AddAlarm(extension_id(), alarm,
126 base::Bind(&AlarmsCreateFunction::Callback, this));
127 127
128 return true; 128 return true;
129 } 129 }
130 130
131 void AlarmsCreateFunction::Callback() { 131 void AlarmsCreateFunction::Callback() {
132 SendResponse(true); 132 SendResponse(true);
133 } 133 }
134 134
135 bool AlarmsGetFunction::RunAsync() { 135 bool AlarmsGetFunction::RunAsync() {
136 scoped_ptr<alarms::Get::Params> params(alarms::Get::Params::Create(*args_)); 136 scoped_ptr<alarms::Get::Params> params(alarms::Get::Params::Create(*args_));
137 EXTENSION_FUNCTION_VALIDATE(params.get()); 137 EXTENSION_FUNCTION_VALIDATE(params.get());
138 138
139 std::string name = params->name.get() ? *params->name : kDefaultAlarmName; 139 std::string name = params->name.get() ? *params->name : kDefaultAlarmName;
140 AlarmManager::Get(browser_context()) 140 AlarmManager::Get(browser_context())
141 ->GetAlarm(extension_id(), 141 ->GetAlarm(extension_id(), name,
142 name,
143 base::Bind(&AlarmsGetFunction::Callback, this, name)); 142 base::Bind(&AlarmsGetFunction::Callback, this, name));
144 143
145 return true; 144 return true;
146 } 145 }
147 146
148 void AlarmsGetFunction::Callback( 147 void AlarmsGetFunction::Callback(const std::string& name,
149 const std::string& name, extensions::Alarm* alarm) { 148 extensions::Alarm* alarm) {
150 if (alarm) { 149 if (alarm) {
151 results_ = alarms::Get::Results::Create(*alarm->js_alarm); 150 results_ = alarms::Get::Results::Create(*alarm->js_alarm);
152 } 151 }
153 SendResponse(true); 152 SendResponse(true);
154 } 153 }
155 154
156 bool AlarmsGetAllFunction::RunAsync() { 155 bool AlarmsGetAllFunction::RunAsync() {
157 AlarmManager::Get(browser_context())->GetAllAlarms( 156 AlarmManager::Get(browser_context())
158 extension_id(), base::Bind(&AlarmsGetAllFunction::Callback, this)); 157 ->GetAllAlarms(extension_id(),
158 base::Bind(&AlarmsGetAllFunction::Callback, this));
159 return true; 159 return true;
160 } 160 }
161 161
162 void AlarmsGetAllFunction::Callback(const AlarmList* alarms) { 162 void AlarmsGetAllFunction::Callback(const AlarmList* alarms) {
163 if (alarms) { 163 if (alarms) {
164 std::vector<linked_ptr<extensions::api::alarms::Alarm> > create_arg; 164 std::vector<linked_ptr<alarms::Alarm>> create_arg;
165 create_arg.reserve(alarms->size()); 165 create_arg.reserve(alarms->size());
166 for (size_t i = 0, size = alarms->size(); i < size; ++i) { 166 for (size_t i = 0, size = alarms->size(); i < size; ++i) {
167 create_arg.push_back((*alarms)[i].js_alarm); 167 create_arg.push_back((*alarms)[i].js_alarm);
168 } 168 }
169 results_ = alarms::GetAll::Results::Create(create_arg); 169 results_ = alarms::GetAll::Results::Create(create_arg);
170 } else { 170 } else {
171 SetResult(new base::ListValue()); 171 SetResult(new base::ListValue());
172 } 172 }
173 SendResponse(true); 173 SendResponse(true);
174 } 174 }
175 175
176 bool AlarmsClearFunction::RunAsync() { 176 bool AlarmsClearFunction::RunAsync() {
177 scoped_ptr<alarms::Clear::Params> params( 177 scoped_ptr<alarms::Clear::Params> params(
178 alarms::Clear::Params::Create(*args_)); 178 alarms::Clear::Params::Create(*args_));
179 EXTENSION_FUNCTION_VALIDATE(params.get()); 179 EXTENSION_FUNCTION_VALIDATE(params.get());
180 180
181 std::string name = params->name.get() ? *params->name : kDefaultAlarmName; 181 std::string name = params->name.get() ? *params->name : kDefaultAlarmName;
182 AlarmManager::Get(browser_context()) 182 AlarmManager::Get(browser_context())
183 ->RemoveAlarm(extension_id(), 183 ->RemoveAlarm(extension_id(), name,
184 name,
185 base::Bind(&AlarmsClearFunction::Callback, this, name)); 184 base::Bind(&AlarmsClearFunction::Callback, this, name));
186 185
187 return true; 186 return true;
188 } 187 }
189 188
190 void AlarmsClearFunction::Callback(const std::string& name, bool success) { 189 void AlarmsClearFunction::Callback(const std::string& name, bool success) {
191 SetResult(new base::FundamentalValue(success)); 190 SetResult(new base::FundamentalValue(success));
192 SendResponse(true); 191 SendResponse(true);
193 } 192 }
194 193
195 bool AlarmsClearAllFunction::RunAsync() { 194 bool AlarmsClearAllFunction::RunAsync() {
196 AlarmManager::Get(browser_context())->RemoveAllAlarms( 195 AlarmManager::Get(browser_context())
197 extension_id(), base::Bind(&AlarmsClearAllFunction::Callback, this)); 196 ->RemoveAllAlarms(extension_id(),
197 base::Bind(&AlarmsClearAllFunction::Callback, this));
198 return true; 198 return true;
199 } 199 }
200 200
201 void AlarmsClearAllFunction::Callback() { 201 void AlarmsClearAllFunction::Callback() {
202 SetResult(new base::FundamentalValue(true)); 202 SetResult(new base::FundamentalValue(true));
203 SendResponse(true); 203 SendResponse(true);
204 } 204 }
205 205
206 } // namespace extensions 206 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698