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

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

Issue 291453002: Make ExtensionFunction::ArgumentList (PKA MultipleArguments) take a scoped_ptr (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: reabse 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
« no previous file with comments | « extensions/browser/extension_function.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
11 #include "content/public/browser/render_view_host.h" 11 #include "content/public/browser/render_view_host.h"
12 #include "content/public/browser/web_contents.h" 12 #include "content/public/browser/web_contents.h"
13 #include "content/public/browser/web_contents_observer.h" 13 #include "content/public/browser/web_contents_observer.h"
14 #include "extensions/browser/extension_function_dispatcher.h" 14 #include "extensions/browser/extension_function_dispatcher.h"
15 #include "extensions/browser/extension_message_filter.h" 15 #include "extensions/browser/extension_message_filter.h"
16 #include "extensions/common/extension_api.h" 16 #include "extensions/common/extension_api.h"
17 #include "extensions/common/extension_messages.h" 17 #include "extensions/common/extension_messages.h"
18 18
19 using content::BrowserThread; 19 using content::BrowserThread;
20 using content::RenderViewHost; 20 using content::RenderViewHost;
21 using content::WebContents; 21 using content::WebContents;
22 using extensions::ExtensionAPI; 22 using extensions::ExtensionAPI;
23 using extensions::Feature; 23 using extensions::Feature;
24 24
25 namespace { 25 namespace {
26 26
27 class MultipleArgumentsResponseValue 27 class ArgumentListResponseValue
28 : public ExtensionFunction::ResponseValueObject { 28 : public ExtensionFunction::ResponseValueObject {
29 public: 29 public:
30 MultipleArgumentsResponseValue(const std::string& function_name, 30 ArgumentListResponseValue(const std::string& function_name,
31 const char* title, 31 const char* title,
32 ExtensionFunction* function, 32 ExtensionFunction* function,
33 base::ListValue* result) 33 scoped_ptr<base::ListValue> result)
34 : function_name_(function_name), title_(title) { 34 : function_name_(function_name), title_(title) {
35 if (function->GetResultList()) { 35 if (function->GetResultList()) {
36 DCHECK_EQ(function->GetResultList(), result) 36 DCHECK_EQ(function->GetResultList(), result.get())
37 << "The result set on this function (" << function_name_ << ") " 37 << "The result set on this function (" << function_name_ << ") "
38 << "either by calling SetResult() or directly modifying |result_| is " 38 << "either by calling SetResult() or directly modifying |result_| is "
39 << "different to the one passed to " << title_ << "(). " 39 << "different to the one passed to " << title_ << "(). "
40 << "The best way to fix this problem is to exclusively use " << title_ 40 << "The best way to fix this problem is to exclusively use " << title_
41 << "(). SetResult() and |result_| are deprecated."; 41 << "(). SetResult() and |result_| are deprecated.";
42 } else { 42 } else {
43 function->SetResultList(make_scoped_ptr(result)); 43 function->SetResultList(result.Pass());
44 } 44 }
45 // It would be nice to DCHECK(error.empty()) but some legacy extension 45 // It would be nice to DCHECK(error.empty()) but some legacy extension
46 // function implementations... I'm looking at chrome.input.ime... do this 46 // function implementations... I'm looking at chrome.input.ime... do this
47 // for some reason. 47 // for some reason.
48 } 48 }
49 49
50 virtual ~MultipleArgumentsResponseValue() {} 50 virtual ~ArgumentListResponseValue() {}
51 51
52 virtual bool Apply() OVERRIDE { return true; } 52 virtual bool Apply() OVERRIDE { return true; }
53 53
54 private: 54 private:
55 std::string function_name_; 55 std::string function_name_;
56 const char* title_; 56 const char* title_;
57 }; 57 };
58 58
59 class ErrorResponseValue : public ExtensionFunction::ResponseValueObject { 59 class ErrorResponseValue : public ExtensionFunction::ResponseValueObject {
60 public: 60 public:
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 215
216 std::string ExtensionFunction::GetError() const { 216 std::string ExtensionFunction::GetError() const {
217 return error_; 217 return error_;
218 } 218 }
219 219
220 void ExtensionFunction::SetError(const std::string& error) { 220 void ExtensionFunction::SetError(const std::string& error) {
221 error_ = error; 221 error_ = error;
222 } 222 }
223 223
224 ExtensionFunction::ResponseValue ExtensionFunction::NoArguments() { 224 ExtensionFunction::ResponseValue ExtensionFunction::NoArguments() {
225 return ResponseValue(new MultipleArgumentsResponseValue( 225 return ResponseValue(new ArgumentListResponseValue(
226 name(), "NoArguments", this, new base::ListValue())); 226 name(), "NoArguments", this, make_scoped_ptr(new base::ListValue())));
227 } 227 }
228 228
229 ExtensionFunction::ResponseValue ExtensionFunction::SingleArgument( 229 ExtensionFunction::ResponseValue ExtensionFunction::OneArgument(
230 base::Value* arg) { 230 base::Value* arg) {
231 base::ListValue* args = new base::ListValue(); 231 scoped_ptr<base::ListValue> args(new base::ListValue());
232 args->Append(arg); 232 args->Append(arg);
233 return ResponseValue( 233 return ResponseValue(
234 new MultipleArgumentsResponseValue(name(), "SingleArgument", this, args)); 234 new ArgumentListResponseValue(name(), "OneArgument", this, args.Pass()));
235 } 235 }
236 236
237 ExtensionFunction::ResponseValue ExtensionFunction::MultipleArguments( 237 ExtensionFunction::ResponseValue ExtensionFunction::TwoArguments(
238 base::ListValue* args) { 238 base::Value* arg1,
239 return ResponseValue(new MultipleArgumentsResponseValue( 239 base::Value* arg2) {
240 name(), "MultipleArguments", this, args)); 240 scoped_ptr<base::ListValue> args(new base::ListValue());
241 args->Append(arg1);
242 args->Append(arg2);
243 return ResponseValue(
244 new ArgumentListResponseValue(name(), "TwoArguments", this, args.Pass()));
245 }
246
247 ExtensionFunction::ResponseValue ExtensionFunction::ArgumentList(
248 scoped_ptr<base::ListValue> args) {
249 return ResponseValue(
250 new ArgumentListResponseValue(name(), "ArgumentList", this, args.Pass()));
241 } 251 }
242 252
243 ExtensionFunction::ResponseValue ExtensionFunction::Error( 253 ExtensionFunction::ResponseValue ExtensionFunction::Error(
244 const std::string& error) { 254 const std::string& error) {
245 return ResponseValue(new ErrorResponseValue(this, error)); 255 return ResponseValue(new ErrorResponseValue(this, error));
246 } 256 }
247 257
248 ExtensionFunction::ResponseValue ExtensionFunction::BadMessage() { 258 ExtensionFunction::ResponseValue ExtensionFunction::BadMessage() {
249 return ResponseValue(new BadMessageResponseValue(this)); 259 return ResponseValue(new BadMessageResponseValue(this));
250 } 260 }
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 return false; 410 return false;
401 } 411 }
402 412
403 SyncExtensionFunction::SyncExtensionFunction() { 413 SyncExtensionFunction::SyncExtensionFunction() {
404 } 414 }
405 415
406 SyncExtensionFunction::~SyncExtensionFunction() { 416 SyncExtensionFunction::~SyncExtensionFunction() {
407 } 417 }
408 418
409 ExtensionFunction::ResponseAction SyncExtensionFunction::Run() { 419 ExtensionFunction::ResponseAction SyncExtensionFunction::Run() {
410 return RespondNow(RunSync() ? MultipleArguments(results_.get()) 420 return RespondNow(RunSync() ? ArgumentList(results_.Pass()) : Error(error_));
411 : Error(error_));
412 } 421 }
413 422
414 // static 423 // static
415 bool SyncExtensionFunction::ValidationFailure(SyncExtensionFunction* function) { 424 bool SyncExtensionFunction::ValidationFailure(SyncExtensionFunction* function) {
416 return false; 425 return false;
417 } 426 }
418 427
419 SyncIOThreadExtensionFunction::SyncIOThreadExtensionFunction() { 428 SyncIOThreadExtensionFunction::SyncIOThreadExtensionFunction() {
420 } 429 }
421 430
422 SyncIOThreadExtensionFunction::~SyncIOThreadExtensionFunction() { 431 SyncIOThreadExtensionFunction::~SyncIOThreadExtensionFunction() {
423 } 432 }
424 433
425 ExtensionFunction::ResponseAction SyncIOThreadExtensionFunction::Run() { 434 ExtensionFunction::ResponseAction SyncIOThreadExtensionFunction::Run() {
426 return RespondNow(RunSync() ? MultipleArguments(results_.get()) 435 return RespondNow(RunSync() ? ArgumentList(results_.Pass()) : Error(error_));
427 : Error(error_));
428 } 436 }
429 437
430 // static 438 // static
431 bool SyncIOThreadExtensionFunction::ValidationFailure( 439 bool SyncIOThreadExtensionFunction::ValidationFailure(
432 SyncIOThreadExtensionFunction* function) { 440 SyncIOThreadExtensionFunction* function) {
433 return false; 441 return false;
434 } 442 }
OLDNEW
« no previous file with comments | « extensions/browser/extension_function.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698