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

Side by Side Diff: extensions/browser/extension_function.cc

Issue 257333002: Drive extension functions from ExtensionFunction::Run. The (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, fix test Created 6 years, 7 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
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/extension_function.h" 5 #include "extensions/browser/extension_function.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/public/browser/notification_source.h" 8 #include "content/public/browser/notification_source.h"
9 #include "content/public/browser/notification_types.h" 9 #include "content/public/browser/notification_types.h"
10 #include "content/public/browser/render_frame_host.h" 10 #include "content/public/browser/render_frame_host.h"
(...skipping 27 matching lines...) Expand all
38 } 38 }
39 39
40 virtual ~MultipleArgumentsResponseValue() {} 40 virtual ~MultipleArgumentsResponseValue() {}
41 41
42 virtual bool Apply() OVERRIDE { return true; } 42 virtual bool Apply() OVERRIDE { return true; }
43 }; 43 };
44 44
45 class ErrorResponseValue : public ExtensionFunction::ResponseValueObject { 45 class ErrorResponseValue : public ExtensionFunction::ResponseValueObject {
46 public: 46 public:
47 ErrorResponseValue(ExtensionFunction* function, const std::string& error) { 47 ErrorResponseValue(ExtensionFunction* function, const std::string& error) {
48 DCHECK_NE("", error); 48 // It would be nice to DCHECK(!error.empty()) but too many legacy extension
49 // function implementations don't set error but signal failure.
49 function->SetError(error); 50 function->SetError(error);
50 } 51 }
51 52
52 virtual ~ErrorResponseValue() {} 53 virtual ~ErrorResponseValue() {}
53 54
54 virtual bool Apply() OVERRIDE { return false; } 55 virtual bool Apply() OVERRIDE { return false; }
55 }; 56 };
56 57
57 class BadMessageResponseValue : public ExtensionFunction::ResponseValueObject { 58 class BadMessageResponseValue : public ExtensionFunction::ResponseValueObject {
58 public: 59 public:
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 ExtensionFunction::ResponseAction ExtensionFunction::RespondNow( 226 ExtensionFunction::ResponseAction ExtensionFunction::RespondNow(
226 ResponseValue result) { 227 ResponseValue result) {
227 return scoped_ptr<ResponseActionObject>(new RespondNowAction( 228 return scoped_ptr<ResponseActionObject>(new RespondNowAction(
228 result.Pass(), base::Bind(&ExtensionFunction::SendResponse, this))); 229 result.Pass(), base::Bind(&ExtensionFunction::SendResponse, this)));
229 } 230 }
230 231
231 ExtensionFunction::ResponseAction ExtensionFunction::RespondLater() { 232 ExtensionFunction::ResponseAction ExtensionFunction::RespondLater() {
232 return scoped_ptr<ResponseActionObject>(new RespondLaterAction()); 233 return scoped_ptr<ResponseActionObject>(new RespondLaterAction());
233 } 234 }
234 235
235 void ExtensionFunction::Run() { 236 void ExtensionFunction::Done(ResponseValue result) {
236 if (!RunImpl()) 237 SendResponse(result->Apply());
237 SendResponse(false);
238 }
239
240 bool ExtensionFunction::RunImpl() {
241 RunImplTypesafe()->Execute();
242 return true;
243 }
244
245 ExtensionFunction::ResponseAction ExtensionFunction::RunImplTypesafe() {
246 NOTREACHED()
247 << "ExtensionFunctions must override either RunImpl or RunImplTypesafe";
248 return RespondNow(NoArguments());
249 }
250
251 void ExtensionFunction::SendResponseTypesafe(ResponseValue response) {
252 SendResponse(response->Apply());
253 } 238 }
254 239
255 bool ExtensionFunction::ShouldSkipQuotaLimiting() const { 240 bool ExtensionFunction::ShouldSkipQuotaLimiting() const {
256 return false; 241 return false;
257 } 242 }
258 243
259 bool ExtensionFunction::HasOptionalArgument(size_t index) { 244 bool ExtensionFunction::HasOptionalArgument(size_t index) {
260 base::Value* value; 245 base::Value* value;
261 return args_->Get(index, &value) && !value->IsType(base::Value::TYPE_NULL); 246 return args_->Get(index, &value) && !value->IsType(base::Value::TYPE_NULL);
262 } 247 }
263 248
264 void ExtensionFunction::SendResponseImpl(bool success) { 249 void ExtensionFunction::SendResponseImpl(bool success) {
265 DCHECK(!response_callback_.is_null()); 250 DCHECK(!response_callback_.is_null());
266 251
267 ResponseType type = success ? SUCCEEDED : FAILED; 252 ResponseType type = success ? SUCCEEDED : FAILED;
268 if (bad_message_) { 253 if (bad_message_) {
269 type = BAD_MESSAGE; 254 type = BAD_MESSAGE;
270 LOG(ERROR) << "Bad extension message " << name_; 255 LOG(ERROR) << "Bad extension message " << name_;
271 } 256 }
272 257
273 // If results were never set, we send an empty argument list. 258 // If results were never set, we send an empty argument list.
274 if (!results_) 259 if (!results_)
275 results_.reset(new base::ListValue()); 260 results_.reset(new base::ListValue());
276 261
277 response_callback_.Run(type, *results_, GetError()); 262 response_callback_.Run(type, *results_, GetError());
278 } 263 }
279 264
265 void ExtensionFunction::OnRespondingLater(ResponseValue value) {
266 SendResponse(value->Apply());
267 }
268
280 UIThreadExtensionFunction::UIThreadExtensionFunction() 269 UIThreadExtensionFunction::UIThreadExtensionFunction()
281 : render_view_host_(NULL), 270 : render_view_host_(NULL),
282 render_frame_host_(NULL), 271 render_frame_host_(NULL),
283 context_(NULL), 272 context_(NULL),
284 delegate_(NULL) { 273 delegate_(NULL) {
285 } 274 }
286 275
287 UIThreadExtensionFunction::~UIThreadExtensionFunction() { 276 UIThreadExtensionFunction::~UIThreadExtensionFunction() {
288 if (dispatcher() && render_view_host()) 277 if (dispatcher() && render_view_host())
289 dispatcher()->OnExtensionFunctionCompleted(GetExtension()); 278 dispatcher()->OnExtensionFunctionCompleted(GetExtension());
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 void IOThreadExtensionFunction::SendResponse(bool success) { 351 void IOThreadExtensionFunction::SendResponse(bool success) {
363 SendResponseImpl(success); 352 SendResponseImpl(success);
364 } 353 }
365 354
366 AsyncExtensionFunction::AsyncExtensionFunction() { 355 AsyncExtensionFunction::AsyncExtensionFunction() {
367 } 356 }
368 357
369 AsyncExtensionFunction::~AsyncExtensionFunction() { 358 AsyncExtensionFunction::~AsyncExtensionFunction() {
370 } 359 }
371 360
361 ExtensionFunction::ResponseAction AsyncExtensionFunction::Run() {
362 return RunAsync() ? RespondLater() : RespondNow(Error(error_));
363 }
364
372 SyncExtensionFunction::SyncExtensionFunction() { 365 SyncExtensionFunction::SyncExtensionFunction() {
373 } 366 }
374 367
375 SyncExtensionFunction::~SyncExtensionFunction() { 368 SyncExtensionFunction::~SyncExtensionFunction() {
376 } 369 }
377 370
378 bool SyncExtensionFunction::RunImpl() { 371 ExtensionFunction::ResponseAction SyncExtensionFunction::Run() {
379 SendResponse(RunSync()); 372 return RespondNow(RunSync() ? MultipleArguments(results_.get())
380 return true; 373 : Error(error_));
381 } 374 }
382 375
383 SyncIOThreadExtensionFunction::SyncIOThreadExtensionFunction() { 376 SyncIOThreadExtensionFunction::SyncIOThreadExtensionFunction() {
384 } 377 }
385 378
386 SyncIOThreadExtensionFunction::~SyncIOThreadExtensionFunction() { 379 SyncIOThreadExtensionFunction::~SyncIOThreadExtensionFunction() {
387 } 380 }
388 381
389 bool SyncIOThreadExtensionFunction::RunImpl() { 382 ExtensionFunction::ResponseAction SyncIOThreadExtensionFunction::Run() {
390 SendResponse(RunSync()); 383 return RespondNow(RunSync() ? MultipleArguments(results_.get())
391 return true; 384 : Error(error_));
392 } 385 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698