summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/extensions/extension_rlz_apitest.cc6
-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.js27
4 files changed, 42 insertions, 10 deletions
diff --git a/chrome/browser/extensions/extension_rlz_apitest.cc b/chrome/browser/extensions/extension_rlz_apitest.cc
index c9c1416..ce97ae0f 100644
--- a/chrome/browser/extensions/extension_rlz_apitest.cc
+++ b/chrome/browser/extensions/extension_rlz_apitest.cc
@@ -55,6 +55,10 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Rlz) {
KEY_READ);
ASSERT_FALSE(key.Valid());
+ key.Open(HKEY_CURRENT_USER, L"Software\\Google\\Common\\Rlz\\Events\\D",
+ KEY_READ);
+ ASSERT_FALSE(key.Valid());
+
// Mock out experimental.rlz.sendFinancialPing().
ASSERT_TRUE(ExtensionFunctionDispatcher::OverrideFunction(
"experimental.rlz.sendFinancialPing",
@@ -66,7 +70,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(3, 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 21d2292..0583904 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..1214b6d 100644
--- a/chrome/test/data/extensions/api_test/rlz/test.js
+++ b/chrome/test/data/extensions/api_test/rlz/test.js
@@ -135,11 +135,30 @@ chrome.test.runTests([
} catch(ex) {
}
- // Valid call.
+ // Valid call. Should send a ping.
+ chrome.experimental.rlz.sendFinancialPing('D', ['D3'], 'sig', 'TEST',
+ 'id', 'en', false,
+ function(sent) {
+ if (sent) {
+ chrome.test.succeed();
+ } else {
+ chrome.test.fail();
+ }
+ });
+
+ // 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();
+ }
+ });
+
+ // Valid call. Test that callback does not need to be specified.
chrome.experimental.rlz.sendFinancialPing('D', ['D3'], 'sig', 'TEST',
'id', 'en', false);
-
- chrome.test.succeed();
}
]);
-