Index: chrome/browser/spellchecker/feedback_sender_unittest.cc |
diff --git a/chrome/browser/spellchecker/feedback_sender_unittest.cc b/chrome/browser/spellchecker/feedback_sender_unittest.cc |
index ed6ac5be270118f549f5ba04da9623995590d272..6bc5c25858ecb872cc52978efd8746d736666bc8 100644 |
--- a/chrome/browser/spellchecker/feedback_sender_unittest.cc |
+++ b/chrome/browser/spellchecker/feedback_sender_unittest.cc |
@@ -62,21 +62,37 @@ int CountOccurences(const std::string& haystack, const std::string& needle) { |
class FeedbackSenderTest : public testing::Test { |
public: |
FeedbackSenderTest() : ui_thread_(content::BrowserThread::UI, &loop_) { |
- // The command-line switch and the field trial are temporary. |
- // TODO(rouslan): Remove the command-line switch and the field trial. |
- // http://crbug.com/247726 |
+ feedback_.reset(new FeedbackSender(NULL, kLanguage, kCountry)); |
+ feedback_->StartFeedbackCollection(); |
+ } |
+ |
+ virtual ~FeedbackSenderTest() {} |
+ |
+ protected: |
+ // Appends the "--enable-spelling-service-feedback" switch to the |
+ // command-line. |
+ void AppendCommandLineSwitch() { |
+ // The command-line switch is temporary. |
+ // TODO(rouslan): Remove the command-line switch. http://crbug.com/247726 |
CommandLine::ForCurrentProcess()->AppendSwitch( |
- switches::kEnableSpellingServiceFeedback); |
+ switches::kEnableSpellingFeedbackFieldTrial); |
+ feedback_.reset(new FeedbackSender(NULL, kLanguage, kCountry)); |
+ feedback_->StartFeedbackCollection(); |
+ } |
+ |
+ // Enables the "SpellingServiceFeedback.Enabled" field trial. |
+ void EnableFieldTrial() { |
+ // The field trial is temporary. |
+ // TODO(rouslan): Remove the field trial. http://crbug.com/247726 |
field_trial_list_.reset( |
new base::FieldTrialList(new metrics::SHA1EntropyProvider("foo"))); |
field_trial_ = base::FieldTrialList::CreateFieldTrial( |
kFeedbackFieldTrialName, kFeedbackFieldTrialEnabledGroupName); |
field_trial_->group(); |
feedback_.reset(new FeedbackSender(NULL, kLanguage, kCountry)); |
+ feedback_->StartFeedbackCollection(); |
} |
- virtual ~FeedbackSenderTest() {} |
- protected: |
uint32 AddPendingFeedback() { |
std::vector<SpellCheckResult> results(1, BuildSpellCheckResult()); |
feedback_->OnSpellcheckResults(kRendererProcessId, |
@@ -433,6 +449,55 @@ TEST_F(FeedbackSenderTest, FeedbackAPI) { |
<< "\nActual data: " << actual_data; |
} |
+// The default API version is "v2". |
+TEST_F(FeedbackSenderTest, DefaultApiVersion) { |
+ AddPendingFeedback(); |
+ feedback_->OnReceiveDocumentMarkers(kRendererProcessId, |
+ std::vector<uint32>()); |
+ EXPECT_TRUE(UploadDataContains("\"apiVersion\":\"v2\"")); |
+ EXPECT_FALSE(UploadDataContains("\"apiVersion\":\"v2-internal\"")); |
+} |
+ |
+// The API version should not change for field-trial participants that do not |
+// append the command-line switch. |
+TEST_F(FeedbackSenderTest, FieldTrialAloneHasSameApiVersion) { |
+ EnableFieldTrial(); |
+ |
+ AddPendingFeedback(); |
+ feedback_->OnReceiveDocumentMarkers(kRendererProcessId, |
+ std::vector<uint32>()); |
+ |
+ EXPECT_TRUE(UploadDataContains("\"apiVersion\":\"v2\"")); |
+ EXPECT_FALSE(UploadDataContains("\"apiVersion\":\"v2-internal\"")); |
+} |
+ |
+// The API version should not change if the command-line switch is appended, but |
+// the user is not participating in the field-trial. |
+TEST_F(FeedbackSenderTest, CommandLineSwitchAloneHasSameApiVersion) { |
+ AppendCommandLineSwitch(); |
+ |
+ AddPendingFeedback(); |
+ feedback_->OnReceiveDocumentMarkers(kRendererProcessId, |
+ std::vector<uint32>()); |
+ |
+ EXPECT_TRUE(UploadDataContains("\"apiVersion\":\"v2\"")); |
+ EXPECT_FALSE(UploadDataContains("\"apiVersion\":\"v2-internal\"")); |
+} |
+ |
+// The API version should be different for field-trial participants that also |
+// append the command-line switch. |
+TEST_F(FeedbackSenderTest, InternalApiVersion) { |
+ AppendCommandLineSwitch(); |
+ EnableFieldTrial(); |
+ |
+ AddPendingFeedback(); |
+ feedback_->OnReceiveDocumentMarkers(kRendererProcessId, |
+ std::vector<uint32>()); |
+ |
+ EXPECT_FALSE(UploadDataContains("\"apiVersion\":\"v2\"")); |
+ EXPECT_TRUE(UploadDataContains("\"apiVersion\":\"v2-internal\"")); |
+} |
+ |
// Duplicate spellcheck results should be matched to the existing markers. |
TEST_F(FeedbackSenderTest, MatchDupliateResultsWithExistingMarkers) { |
uint32 hash = AddPendingFeedback(); |
@@ -524,4 +589,36 @@ TEST_F(FeedbackSenderTest, IgnoreOutOfBounds) { |
EXPECT_FALSE(IsUploadingData()); |
} |
+// FeedbackSender does not collect and upload feedback when instructed to stop. |
+TEST_F(FeedbackSenderTest, CanStopFeedbackCollection) { |
+ feedback_->StopFeedbackCollection(); |
+ AddPendingFeedback(); |
+ feedback_->OnReceiveDocumentMarkers(kRendererProcessId, |
+ std::vector<uint32>()); |
+ EXPECT_FALSE(IsUploadingData()); |
+} |
+ |
+// FeedbackSender resumes collecting and uploading feedback when instructed to |
+// start after stopping. |
+TEST_F(FeedbackSenderTest, CanResumeFeedbackCollection) { |
+ feedback_->StopFeedbackCollection(); |
+ feedback_->StartFeedbackCollection(); |
+ AddPendingFeedback(); |
+ feedback_->OnReceiveDocumentMarkers(kRendererProcessId, |
+ std::vector<uint32>()); |
+ EXPECT_TRUE(IsUploadingData()); |
+} |
+ |
+// FeedbackSender does not collect data while being stopped and upload it later. |
+TEST_F(FeedbackSenderTest, NoFeedbackCollectionWhenStopped) { |
+ feedback_->StopFeedbackCollection(); |
+ AddPendingFeedback(); |
+ feedback_->OnReceiveDocumentMarkers(kRendererProcessId, |
+ std::vector<uint32>()); |
+ feedback_->StartFeedbackCollection(); |
+ feedback_->OnReceiveDocumentMarkers(kRendererProcessId, |
+ std::vector<uint32>()); |
+ EXPECT_FALSE(IsUploadingData()); |
+} |
+ |
} // namespace spellcheck |