summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrogerta@google.com <rogerta@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-08 15:55:16 +0000
committerrogerta@google.com <rogerta@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-08 15:55:16 +0000
commit1d33712b9d0ef178d05378bd5877b0f6241b5f6e (patch)
treeb5757128b313035060ffdf170f27d49e39eb6ae2
parentba00b49d134df5d468ddd62d21ab33d7401b59fa (diff)
downloadchromium_src-1d33712b9d0ef178d05378bd5877b0f6241b5f6e.zip
chromium_src-1d33712b9d0ef178d05378bd5877b0f6241b5f6e.tar.gz
chromium_src-1d33712b9d0ef178d05378bd5877b0f6241b5f6e.tar.bz2
Don't use the return value of rlz_lib::SendFinancialPing() as the return value
of the chrome extension API, since a false does not represent an error. Added an optional callback to the API so that caller can determine if the ping was sent or not. BUG=54294 TEST=n/a Review URL: http://codereview.chromium.org/3358012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58827 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_rlz_apitest.cc2
-rw-r--r--chrome/browser/extensions/extension_rlz_module.cc16
-rw-r--r--chrome/common/extensions/api/extension_api.json3
-rw-r--r--chrome/test/data/extensions/api_test/rlz/test.js11
4 files changed, 25 insertions, 7 deletions
diff --git a/chrome/browser/extensions/extension_rlz_apitest.cc b/chrome/browser/extensions/extension_rlz_apitest.cc
index c9c1416..7340647 100644
--- a/chrome/browser/extensions/extension_rlz_apitest.cc
+++ b/chrome/browser/extensions/extension_rlz_apitest.cc
@@ -66,7 +66,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Rlz) {
// Now run all the tests.
ASSERT_TRUE(RunExtensionTest("rlz")) << message_;
- ASSERT_EQ(1, MockRlzSendFinancialPingFunction::expected_count());
+ ASSERT_EQ(2, MockRlzSendFinancialPingFunction::expected_count());
ExtensionFunctionDispatcher::ResetFunctions();
// Now make sure we recorded what was expected. If the code in test.js
diff --git a/chrome/browser/extensions/extension_rlz_module.cc b/chrome/browser/extensions/extension_rlz_module.cc
index 25724be..e31fc69 100644
--- a/chrome/browser/extensions/extension_rlz_module.cc
+++ b/chrome/browser/extensions/extension_rlz_module.cc
@@ -144,10 +144,18 @@ bool RlzSendFinancialPingFunction::RunImpl() {
bool exclude_machine_id;
EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(6, &exclude_machine_id));
- return rlz_lib::SendFinancialPing(product, access_points.get(),
- signature.c_str(), brand.c_str(),
- id.c_str(), lang.c_str(),
- exclude_machine_id);
+ // rlz_lib::SendFinancialPing() will not send a ping more often than once in
+ // any 24-hour period. Calling it more often has no effect. If a ping is
+ // not sent false is returned, but this is not an error, so we should not
+ // use the return value of rlz_lib::SendFinancialPing() as the return value
+ // of this function. Callers interested in the return value can register
+ // an optional callback function.
+ bool sent = rlz_lib::SendFinancialPing(product, access_points.get(),
+ signature.c_str(), brand.c_str(),
+ id.c_str(), lang.c_str(),
+ exclude_machine_id);
+ result_.reset(Value::CreateBooleanValue(sent));
+ return true;
}
bool RlzClearProductStateFunction::RunImpl() {
diff --git a/chrome/common/extensions/api/extension_api.json b/chrome/common/extensions/api/extension_api.json
index 0ca4808..1336ff0 100644
--- a/chrome/common/extensions/api/extension_api.json
+++ b/chrome/common/extensions/api/extension_api.json
@@ -3141,7 +3141,8 @@
{"name": "brand", "type": "string"},
{"name": "id", "type": "string"},
{"name": "lang", "type": "string"},
- {"name": "exclude_machine_id", "type": "boolean"}
+ {"name": "exclude_machine_id", "type": "boolean"},
+ {"name": "callback", "type": "function", "optional": true, "parameters": [{"name": "sent", "type": "boolean"}]}
]
},
{
diff --git a/chrome/test/data/extensions/api_test/rlz/test.js b/chrome/test/data/extensions/api_test/rlz/test.js
index 6fb4239..445f023 100644
--- a/chrome/test/data/extensions/api_test/rlz/test.js
+++ b/chrome/test/data/extensions/api_test/rlz/test.js
@@ -139,7 +139,16 @@ chrome.test.runTests([
chrome.experimental.rlz.sendFinancialPing('D', ['D3'], 'sig', 'TEST',
'id', 'en', false);
- chrome.test.succeed();
+ // try another call, this time the ping should not be sent.
+ chrome.experimental.rlz.sendFinancialPing('D', ['D3'], 'sig', 'TEST',
+ 'id', 'en', false,
+ function(sent) {
+ if (sent) {
+ chrome.test.fail();
+ } else {
+ chrome.test.succeed();
+ }
+ });
}
]);