diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/autofill/autofill_manager_unittest.cc | 36 | ||||
-rw-r--r-- | chrome/browser/renderer_host/render_view_host.cc | 10 |
2 files changed, 45 insertions, 1 deletions
diff --git a/chrome/browser/autofill/autofill_manager_unittest.cc b/chrome/browser/autofill/autofill_manager_unittest.cc index 1549079..8aeeb25 100644 --- a/chrome/browser/autofill/autofill_manager_unittest.cc +++ b/chrome/browser/autofill/autofill_manager_unittest.cc @@ -599,6 +599,42 @@ TEST_F(AutoFillManagerTest, GetFieldSuggestionsFormIsAutoFilled) { EXPECT_EQ(string16(), labels[1]); } +TEST_F(AutoFillManagerTest, GetFieldSuggestionsForAutocompleteOnly) { + FormData form; + CreateTestFormData(&form); + + // Set up our FormStructures. + std::vector<FormData> forms; + forms.push_back(form); + autofill_manager_->FormsSeen(forms); + + // The page ID sent to the AutoFillManager from the RenderView, used to send + // an IPC message back to the renderer. + const int kPageID = 1; + const int kAlternatePageID = 0; + + webkit_glue::FormField field; + autofill_unittest::CreateTestFormField( + "First Name", "firstname", "", "text", &field); + EXPECT_TRUE(autofill_manager_->GetAutoFillSuggestions(kPageID, true, field)); + + // No suggestions provided, so send an empty vector as the results. + // This triggers the combined message send. + // In this case, we're simulating a cancel of Autocomplete with a different + // page ID and an empty vector of suggestions. + rvh()->AutocompleteSuggestionsReturned(kAlternatePageID, + std::vector<string16>()); + + // Test that we sent the right message to the renderer. + int page_id = 0; + std::vector<string16> values; + std::vector<string16> labels; + EXPECT_TRUE(GetAutoFillSuggestionsMessage(&page_id, &values, &labels)); + EXPECT_EQ(kAlternatePageID, page_id); + ASSERT_EQ(0U, values.size()); + ASSERT_EQ(0U, labels.size()); +} + TEST_F(AutoFillManagerTest, GetFieldSuggestionsWithDuplicateValues) { FormData form; CreateTestFormData(&form); diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 28b44a3..4905ad5 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -1659,7 +1659,15 @@ void RenderViewHost::AutoFillSuggestionsReturned( void RenderViewHost::AutocompleteSuggestionsReturned( int query_id, const std::vector<string16>& suggestions) { - DCHECK_EQ(autofill_query_id_, query_id); + // When query ids match we are responding to an AutoFill and Autocomplete + // combined query response. + // Otherwise Autocomplete is cancelling, so we only send suggestions (usually + // an empty list). + if (autofill_query_id_ != query_id) { + // Autocomplete is cancelling. + autofill_values_.clear(); + autofill_labels_.clear(); + } // Combine AutoFill and Autocomplete values into values and labels. for (size_t i = 0; i < suggestions.size(); ++i) { |