• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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 "chrome/browser/extensions/extension_function.h"
6 
7 #include "base/json/json_writer.h"
8 #include "base/logging.h"
9 #include "chrome/browser/extensions/extension_function_dispatcher.h"
10 #include "chrome/browser/extensions/extension_service.h"
11 #include "chrome/browser/profiles/profile.h"
12 
ExtensionFunction()13 ExtensionFunction::ExtensionFunction()
14     : request_id_(-1),
15       profile_(NULL),
16       has_callback_(false),
17       include_incognito_(false),
18       user_gesture_(false) {
19 }
20 
~ExtensionFunction()21 ExtensionFunction::~ExtensionFunction() {
22 }
23 
GetExtension()24 const Extension* ExtensionFunction::GetExtension() {
25   ExtensionService* service = profile_->GetExtensionService();
26   DCHECK(service);
27   return service->GetExtensionById(extension_id_, false);
28 }
29 
GetCurrentBrowser()30 Browser* ExtensionFunction::GetCurrentBrowser() {
31   return dispatcher()->GetCurrentBrowser(include_incognito_);
32 }
33 
AsyncExtensionFunction()34 AsyncExtensionFunction::AsyncExtensionFunction()
35     : args_(NULL), bad_message_(false) {
36 }
37 
~AsyncExtensionFunction()38 AsyncExtensionFunction::~AsyncExtensionFunction() {
39 }
40 
SetArgs(const ListValue * args)41 void AsyncExtensionFunction::SetArgs(const ListValue* args) {
42   DCHECK(!args_.get());  // Should only be called once.
43   args_.reset(args->DeepCopy());
44 }
45 
GetResult()46 const std::string AsyncExtensionFunction::GetResult() {
47   std::string json;
48   // Some functions might not need to return any results.
49   if (result_.get())
50     base::JSONWriter::Write(result_.get(), false, &json);
51   return json;
52 }
53 
GetError()54 const std::string AsyncExtensionFunction::GetError() {
55   return error_;
56 }
57 
Run()58 void AsyncExtensionFunction::Run() {
59   if (!RunImpl())
60     SendResponse(false);
61 }
62 
SendResponse(bool success)63 void AsyncExtensionFunction::SendResponse(bool success) {
64   if (!dispatcher())
65     return;
66   if (bad_message_) {
67     dispatcher()->HandleBadMessage(this);
68   } else {
69     dispatcher()->SendResponse(this, success);
70   }
71 }
72 
HasOptionalArgument(size_t index)73 bool AsyncExtensionFunction::HasOptionalArgument(size_t index) {
74   Value* value;
75   return args_->Get(index, &value) && !value->IsType(Value::TYPE_NULL);
76 }
77 
SyncExtensionFunction()78 SyncExtensionFunction::SyncExtensionFunction() {
79 }
80 
~SyncExtensionFunction()81 SyncExtensionFunction::~SyncExtensionFunction() {
82 }
83 
Run()84 void SyncExtensionFunction::Run() {
85   SendResponse(RunImpl());
86 }
87