| OLD | NEW |
| 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 #ifndef EXTENSIONS_BROWSER_EXTENSION_FUNCTION_H_ | 5 #ifndef EXTENSIONS_BROWSER_EXTENSION_FUNCTION_H_ |
| 6 #define EXTENSIONS_BROWSER_EXTENSION_FUNCTION_H_ | 6 #define EXTENSIONS_BROWSER_EXTENSION_FUNCTION_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <list> | 10 #include <list> |
| 11 #include <memory> |
| 11 #include <string> | 12 #include <string> |
| 12 | 13 |
| 13 #include "base/callback.h" | 14 #include "base/callback.h" |
| 14 #include "base/compiler_specific.h" | 15 #include "base/compiler_specific.h" |
| 15 #include "base/macros.h" | 16 #include "base/macros.h" |
| 16 #include "base/memory/ref_counted.h" | 17 #include "base/memory/ref_counted.h" |
| 17 #include "base/memory/scoped_ptr.h" | |
| 18 #include "base/memory/weak_ptr.h" | 18 #include "base/memory/weak_ptr.h" |
| 19 #include "base/process/process.h" | 19 #include "base/process/process.h" |
| 20 #include "base/sequenced_task_runner_helpers.h" | 20 #include "base/sequenced_task_runner_helpers.h" |
| 21 #include "content/public/browser/browser_thread.h" | 21 #include "content/public/browser/browser_thread.h" |
| 22 #include "content/public/common/console_message_level.h" | 22 #include "content/public/common/console_message_level.h" |
| 23 #include "extensions/browser/extension_function_histogram_value.h" | 23 #include "extensions/browser/extension_function_histogram_value.h" |
| 24 #include "extensions/browser/info_map.h" | 24 #include "extensions/browser/info_map.h" |
| 25 #include "extensions/common/extension.h" | 25 #include "extensions/common/extension.h" |
| 26 #include "extensions/common/features/feature.h" | 26 #include "extensions/common/features/feature.h" |
| 27 #include "ipc/ipc_message.h" | 27 #include "ipc/ipc_message.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 // | 127 // |
| 128 // Use NoArguments(), OneArgument(), ArgumentList(), or Error() | 128 // Use NoArguments(), OneArgument(), ArgumentList(), or Error() |
| 129 // rather than this class directly. | 129 // rather than this class directly. |
| 130 class ResponseValueObject { | 130 class ResponseValueObject { |
| 131 public: | 131 public: |
| 132 virtual ~ResponseValueObject() {} | 132 virtual ~ResponseValueObject() {} |
| 133 | 133 |
| 134 // Returns true for success, false for failure. | 134 // Returns true for success, false for failure. |
| 135 virtual bool Apply() = 0; | 135 virtual bool Apply() = 0; |
| 136 }; | 136 }; |
| 137 typedef scoped_ptr<ResponseValueObject> ResponseValue; | 137 typedef std::unique_ptr<ResponseValueObject> ResponseValue; |
| 138 | 138 |
| 139 // The action to use when returning from RunAsync. | 139 // The action to use when returning from RunAsync. |
| 140 // | 140 // |
| 141 // Use RespondNow() or RespondLater() rather than this class directly. | 141 // Use RespondNow() or RespondLater() rather than this class directly. |
| 142 class ResponseActionObject { | 142 class ResponseActionObject { |
| 143 public: | 143 public: |
| 144 virtual ~ResponseActionObject() {} | 144 virtual ~ResponseActionObject() {} |
| 145 | 145 |
| 146 virtual void Execute() = 0; | 146 virtual void Execute() = 0; |
| 147 }; | 147 }; |
| 148 typedef scoped_ptr<ResponseActionObject> ResponseAction; | 148 typedef std::unique_ptr<ResponseActionObject> ResponseAction; |
| 149 | 149 |
| 150 // Helper class for tests to force all ExtensionFunction::user_gesture() | 150 // Helper class for tests to force all ExtensionFunction::user_gesture() |
| 151 // calls to return true as long as at least one instance of this class | 151 // calls to return true as long as at least one instance of this class |
| 152 // exists. | 152 // exists. |
| 153 class ScopedUserGestureForTests { | 153 class ScopedUserGestureForTests { |
| 154 public: | 154 public: |
| 155 ScopedUserGestureForTests(); | 155 ScopedUserGestureForTests(); |
| 156 ~ScopedUserGestureForTests(); | 156 ~ScopedUserGestureForTests(); |
| 157 }; | 157 }; |
| 158 | 158 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 extensions::QuotaLimitHeuristics* heuristics) const {} | 196 extensions::QuotaLimitHeuristics* heuristics) const {} |
| 197 | 197 |
| 198 // Called when the quota limit has been exceeded. The default implementation | 198 // Called when the quota limit has been exceeded. The default implementation |
| 199 // returns an error. | 199 // returns an error. |
| 200 virtual void OnQuotaExceeded(const std::string& violation_error); | 200 virtual void OnQuotaExceeded(const std::string& violation_error); |
| 201 | 201 |
| 202 // Specifies the raw arguments to the function, as a JSON value. | 202 // Specifies the raw arguments to the function, as a JSON value. |
| 203 virtual void SetArgs(const base::ListValue* args); | 203 virtual void SetArgs(const base::ListValue* args); |
| 204 | 204 |
| 205 // Sets a single Value as the results of the function. | 205 // Sets a single Value as the results of the function. |
| 206 void SetResult(scoped_ptr<base::Value> result); | 206 void SetResult(std::unique_ptr<base::Value> result); |
| 207 // As above, but deprecated. TODO(estade): remove. | 207 // As above, but deprecated. TODO(estade): remove. |
| 208 void SetResult(base::Value* result); | 208 void SetResult(base::Value* result); |
| 209 | 209 |
| 210 // Sets multiple Values as the results of the function. | 210 // Sets multiple Values as the results of the function. |
| 211 void SetResultList(scoped_ptr<base::ListValue> results); | 211 void SetResultList(std::unique_ptr<base::ListValue> results); |
| 212 | 212 |
| 213 // Retrieves the results of the function as a ListValue. | 213 // Retrieves the results of the function as a ListValue. |
| 214 const base::ListValue* GetResultList() const; | 214 const base::ListValue* GetResultList() const; |
| 215 | 215 |
| 216 // Retrieves any error string from the function. | 216 // Retrieves any error string from the function. |
| 217 virtual std::string GetError() const; | 217 virtual std::string GetError() const; |
| 218 | 218 |
| 219 // Sets the function's error string. | 219 // Sets the function's error string. |
| 220 virtual void SetError(const std::string& error); | 220 virtual void SetError(const std::string& error); |
| 221 | 221 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 | 293 |
| 294 // ResponseValues. | 294 // ResponseValues. |
| 295 // | 295 // |
| 296 // Success, no arguments to pass to caller. | 296 // Success, no arguments to pass to caller. |
| 297 ResponseValue NoArguments(); | 297 ResponseValue NoArguments(); |
| 298 // Success, a single argument |arg| to pass to caller. TAKES OWNERSHIP - a | 298 // Success, a single argument |arg| to pass to caller. TAKES OWNERSHIP - a |
| 299 // raw pointer for convenience, since callers usually construct the argument | 299 // raw pointer for convenience, since callers usually construct the argument |
| 300 // to this by hand. | 300 // to this by hand. |
| 301 ResponseValue OneArgument(base::Value* arg); | 301 ResponseValue OneArgument(base::Value* arg); |
| 302 // Success, a single argument |arg| to pass to caller. | 302 // Success, a single argument |arg| to pass to caller. |
| 303 ResponseValue OneArgument(scoped_ptr<base::Value> arg); | 303 ResponseValue OneArgument(std::unique_ptr<base::Value> arg); |
| 304 // Success, two arguments |arg1| and |arg2| to pass to caller. TAKES | 304 // Success, two arguments |arg1| and |arg2| to pass to caller. TAKES |
| 305 // OWNERSHIP - raw pointers for convenience, since callers usually construct | 305 // OWNERSHIP - raw pointers for convenience, since callers usually construct |
| 306 // the argument to this by hand. Note that use of this function may imply you | 306 // the argument to this by hand. Note that use of this function may imply you |
| 307 // should be using the generated Result struct and ArgumentList. | 307 // should be using the generated Result struct and ArgumentList. |
| 308 ResponseValue TwoArguments(base::Value* arg1, base::Value* arg2); | 308 ResponseValue TwoArguments(base::Value* arg1, base::Value* arg2); |
| 309 // Success, a list of arguments |results| to pass to caller. TAKES OWNERSHIP | 309 // Success, a list of arguments |results| to pass to caller. TAKES OWNERSHIP |
| 310 // - a scoped_ptr<> for convenience, since callers usually get this from the | 310 // - a std::unique_ptr<> for convenience, since callers usually get this from |
| 311 // the |
| 311 // result of a Create(...) call on the generated Results struct, for example, | 312 // result of a Create(...) call on the generated Results struct, for example, |
| 312 // alarms::Get::Results::Create(alarm). | 313 // alarms::Get::Results::Create(alarm). |
| 313 ResponseValue ArgumentList(scoped_ptr<base::ListValue> results); | 314 ResponseValue ArgumentList(std::unique_ptr<base::ListValue> results); |
| 314 // Error. chrome.runtime.lastError.message will be set to |error|. | 315 // Error. chrome.runtime.lastError.message will be set to |error|. |
| 315 ResponseValue Error(const std::string& error); | 316 ResponseValue Error(const std::string& error); |
| 316 // Error with formatting. Args are processed using | 317 // Error with formatting. Args are processed using |
| 317 // ErrorUtils::FormatErrorMessage, that is, each occurence of * is replaced | 318 // ErrorUtils::FormatErrorMessage, that is, each occurence of * is replaced |
| 318 // by the corresponding |s*|: | 319 // by the corresponding |s*|: |
| 319 // Error("Error in *: *", "foo", "bar") <--> Error("Error in foo: bar"). | 320 // Error("Error in *: *", "foo", "bar") <--> Error("Error in foo: bar"). |
| 320 ResponseValue Error(const std::string& format, const std::string& s1); | 321 ResponseValue Error(const std::string& format, const std::string& s1); |
| 321 ResponseValue Error(const std::string& format, | 322 ResponseValue Error(const std::string& format, |
| 322 const std::string& s1, | 323 const std::string& s1, |
| 323 const std::string& s2); | 324 const std::string& s2); |
| 324 ResponseValue Error(const std::string& format, | 325 ResponseValue Error(const std::string& format, |
| 325 const std::string& s1, | 326 const std::string& s1, |
| 326 const std::string& s2, | 327 const std::string& s2, |
| 327 const std::string& s3); | 328 const std::string& s3); |
| 328 // Error with a list of arguments |args| to pass to caller. TAKES OWNERSHIP. | 329 // Error with a list of arguments |args| to pass to caller. TAKES OWNERSHIP. |
| 329 // Using this ResponseValue indicates something is wrong with the API. | 330 // Using this ResponseValue indicates something is wrong with the API. |
| 330 // It shouldn't be possible to have both an error *and* some arguments. | 331 // It shouldn't be possible to have both an error *and* some arguments. |
| 331 // Some legacy APIs do rely on it though, like webstorePrivate. | 332 // Some legacy APIs do rely on it though, like webstorePrivate. |
| 332 ResponseValue ErrorWithArguments(scoped_ptr<base::ListValue> args, | 333 ResponseValue ErrorWithArguments(std::unique_ptr<base::ListValue> args, |
| 333 const std::string& error); | 334 const std::string& error); |
| 334 // Bad message. A ResponseValue equivalent to EXTENSION_FUNCTION_VALIDATE(), | 335 // Bad message. A ResponseValue equivalent to EXTENSION_FUNCTION_VALIDATE(), |
| 335 // so this will actually kill the renderer and not respond at all. | 336 // so this will actually kill the renderer and not respond at all. |
| 336 ResponseValue BadMessage(); | 337 ResponseValue BadMessage(); |
| 337 | 338 |
| 338 // ResponseActions. | 339 // ResponseActions. |
| 339 // | 340 // |
| 340 // These are exclusively used as return values from Run(). Call Respond(...) | 341 // These are exclusively used as return values from Run(). Call Respond(...) |
| 341 // to respond at any other time - but as described below, only after Run() | 342 // to respond at any other time - but as described below, only after Run() |
| 342 // has already executed, and only if it returned RespondLater(). | 343 // has already executed, and only if it returned RespondLater(). |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 // True if this callback should include information from incognito contexts | 401 // True if this callback should include information from incognito contexts |
| 401 // even if our profile_ is non-incognito. Note that in the case of a "split" | 402 // even if our profile_ is non-incognito. Note that in the case of a "split" |
| 402 // mode extension, this will always be false, and we will limit access to | 403 // mode extension, this will always be false, and we will limit access to |
| 403 // data from within the same profile_ (either incognito or not). | 404 // data from within the same profile_ (either incognito or not). |
| 404 bool include_incognito_; | 405 bool include_incognito_; |
| 405 | 406 |
| 406 // True if the call was made in response of user gesture. | 407 // True if the call was made in response of user gesture. |
| 407 bool user_gesture_; | 408 bool user_gesture_; |
| 408 | 409 |
| 409 // The arguments to the API. Only non-null if argument were specified. | 410 // The arguments to the API. Only non-null if argument were specified. |
| 410 scoped_ptr<base::ListValue> args_; | 411 std::unique_ptr<base::ListValue> args_; |
| 411 | 412 |
| 412 // The results of the API. This should be populated by the derived class | 413 // The results of the API. This should be populated by the derived class |
| 413 // before SendResponse() is called. | 414 // before SendResponse() is called. |
| 414 scoped_ptr<base::ListValue> results_; | 415 std::unique_ptr<base::ListValue> results_; |
| 415 | 416 |
| 416 // Any detailed error from the API. This should be populated by the derived | 417 // Any detailed error from the API. This should be populated by the derived |
| 417 // class before Run() returns. | 418 // class before Run() returns. |
| 418 std::string error_; | 419 std::string error_; |
| 419 | 420 |
| 420 // Any class that gets a malformed message should set this to true before | 421 // Any class that gets a malformed message should set this to true before |
| 421 // returning. Usually we want to kill the message sending process. | 422 // returning. Usually we want to kill the message sending process. |
| 422 bool bad_message_; | 423 bool bad_message_; |
| 423 | 424 |
| 424 // The sample value to record with the histogram API when the function | 425 // The sample value to record with the histogram API when the function |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 class RenderFrameHostTracker; | 530 class RenderFrameHostTracker; |
| 530 | 531 |
| 531 void Destruct() const override; | 532 void Destruct() const override; |
| 532 | 533 |
| 533 // The dispatcher that will service this extension function call. | 534 // The dispatcher that will service this extension function call. |
| 534 base::WeakPtr<extensions::ExtensionFunctionDispatcher> dispatcher_; | 535 base::WeakPtr<extensions::ExtensionFunctionDispatcher> dispatcher_; |
| 535 | 536 |
| 536 // The RenderFrameHost we will send responses to. | 537 // The RenderFrameHost we will send responses to. |
| 537 content::RenderFrameHost* render_frame_host_; | 538 content::RenderFrameHost* render_frame_host_; |
| 538 | 539 |
| 539 scoped_ptr<RenderFrameHostTracker> tracker_; | 540 std::unique_ptr<RenderFrameHostTracker> tracker_; |
| 540 | 541 |
| 541 DelegateForTests* delegate_; | 542 DelegateForTests* delegate_; |
| 542 | 543 |
| 543 // The blobs transferred to the renderer process. | 544 // The blobs transferred to the renderer process. |
| 544 std::vector<std::string> transferred_blob_uuids_; | 545 std::vector<std::string> transferred_blob_uuids_; |
| 545 | 546 |
| 546 DISALLOW_COPY_AND_ASSIGN(UIThreadExtensionFunction); | 547 DISALLOW_COPY_AND_ASSIGN(UIThreadExtensionFunction); |
| 547 }; | 548 }; |
| 548 | 549 |
| 549 // Extension functions that run on the IO thread. This type of function avoids | 550 // Extension functions that run on the IO thread. This type of function avoids |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 private: | 680 private: |
| 680 // If you're hitting a compile error here due to "final" - great! You're | 681 // If you're hitting a compile error here due to "final" - great! You're |
| 681 // doing the right thing, you just need to extend IOThreadExtensionFunction | 682 // doing the right thing, you just need to extend IOThreadExtensionFunction |
| 682 // instead of SyncIOExtensionFunction. | 683 // instead of SyncIOExtensionFunction. |
| 683 ResponseAction Run() final; | 684 ResponseAction Run() final; |
| 684 | 685 |
| 685 DISALLOW_COPY_AND_ASSIGN(SyncIOThreadExtensionFunction); | 686 DISALLOW_COPY_AND_ASSIGN(SyncIOThreadExtensionFunction); |
| 686 }; | 687 }; |
| 687 | 688 |
| 688 #endif // EXTENSIONS_BROWSER_EXTENSION_FUNCTION_H_ | 689 #endif // EXTENSIONS_BROWSER_EXTENSION_FUNCTION_H_ |
| OLD | NEW |