Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(373)

Side by Side Diff: chrome/browser/ui/views/autofill/autofill_dialog_views.cc

Issue 124533003: Add country combobox to change country and rebuild address inputs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "chrome/browser/ui/views/autofill/autofill_dialog_views.h" 5 #include "chrome/browser/ui/views/autofill/autofill_dialog_views.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 1299 matching lines...) Expand 10 before | Expand all | Expand 10 after
1310 } 1310 }
1311 1311
1312 void AutofillDialogViews::UpdateErrorBubble() { 1312 void AutofillDialogViews::UpdateErrorBubble() {
1313 if (!delegate_->ShouldShowErrorBubble()) 1313 if (!delegate_->ShouldShowErrorBubble())
1314 HideErrorBubble(); 1314 HideErrorBubble();
1315 } 1315 }
1316 1316
1317 void AutofillDialogViews::FillSection(DialogSection section, 1317 void AutofillDialogViews::FillSection(DialogSection section,
1318 ServerFieldType originating_type) { 1318 ServerFieldType originating_type) {
1319 DetailsGroup* group = GroupForSection(section); 1319 DetailsGroup* group = GroupForSection(section);
1320 // Make sure to overwrite the originating input. 1320 // Make sure to overwrite the originating input if it exists.
1321 TextfieldMap::iterator text_mapping = 1321 TextfieldMap::iterator text_mapping =
1322 group->textfields.find(originating_type); 1322 group->textfields.find(originating_type);
1323 if (text_mapping != group->textfields.end()) 1323 if (text_mapping != group->textfields.end())
1324 text_mapping->second->SetText(base::string16()); 1324 text_mapping->second->SetText(base::string16());
1325 1325
1326 // If the Autofill data comes from a credit card, make sure to overwrite the 1326 // If the Autofill data comes from a credit card, make sure to overwrite the
1327 // CC comboboxes (even if they already have something in them). If the 1327 // CC comboboxes (even if they already have something in them). If the
1328 // Autofill data comes from an AutofillProfile, leave the comboboxes alone. 1328 // Autofill data comes from an AutofillProfile, leave the comboboxes alone.
1329 if (section == GetCreditCardSection() && 1329 if (section == GetCreditCardSection() &&
1330 AutofillType(originating_type).group() == CREDIT_CARD) { 1330 AutofillType(originating_type).group() == CREDIT_CARD) {
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
1460 ServerFieldType type, 1460 ServerFieldType type,
1461 const base::string16& contents) { 1461 const base::string16& contents) {
1462 views::Textfield* textfield = TextfieldForType(type); 1462 views::Textfield* textfield = TextfieldForType(type);
1463 if (textfield) { 1463 if (textfield) {
1464 textfield->SetText(contents); 1464 textfield->SetText(contents);
1465 return; 1465 return;
1466 } 1466 }
1467 1467
1468 views::Combobox* combobox = ComboboxForType(type); 1468 views::Combobox* combobox = ComboboxForType(type);
1469 if (combobox) { 1469 if (combobox) {
1470 int selected_index = combobox->selected_index();
1470 SelectComboboxValueOrSetToDefault(combobox, contents); 1471 SelectComboboxValueOrSetToDefault(combobox, contents);
1472 if (combobox->selected_index() != selected_index)
1473 OnSelectedIndexChanged(combobox);
1471 return; 1474 return;
1472 } 1475 }
1473 1476
1474 NOTREACHED(); 1477 NOTREACHED();
1475 } 1478 }
1476 1479
1477 void AutofillDialogViews::SetTextContentsOfSuggestionInput( 1480 void AutofillDialogViews::SetTextContentsOfSuggestionInput(
1478 DialogSection section, 1481 DialogSection section,
1479 const base::string16& text) { 1482 const base::string16& text) {
1480 GroupForSection(section)->suggested_info->decorated_textfield()-> 1483 GroupForSection(section)->suggested_info->decorated_textfield()->
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1529 1532
1530 // The rest (the |scrollable_area_|) takes up whatever's left. 1533 // The rest (the |scrollable_area_|) takes up whatever's left.
1531 if (scrollable_area_->visible()) { 1534 if (scrollable_area_->visible()) {
1532 int scroll_y = y; 1535 int scroll_y = y;
1533 if (notification_height > notification_area_->GetInsets().height()) 1536 if (notification_height > notification_area_->GetInsets().height())
1534 scroll_y += notification_height + views::kRelatedControlVerticalSpacing; 1537 scroll_y += notification_height + views::kRelatedControlVerticalSpacing;
1535 1538
1536 int scroll_bottom = content_bounds.bottom(); 1539 int scroll_bottom = content_bounds.bottom();
1537 DCHECK_EQ(scrollable_area_->contents(), details_container_); 1540 DCHECK_EQ(scrollable_area_->contents(), details_container_);
1538 details_container_->SizeToPreferredSize(); 1541 details_container_->SizeToPreferredSize();
1542 details_container_->Layout();
1539 // TODO(estade): remove this hack. See crbug.com/285996 1543 // TODO(estade): remove this hack. See crbug.com/285996
1540 details_container_->set_ignore_layouts(true); 1544 details_container_->set_ignore_layouts(true);
1541 scrollable_area_->SetBounds(x, scroll_y, width, scroll_bottom - scroll_y); 1545 scrollable_area_->SetBounds(x, scroll_y, width, scroll_bottom - scroll_y);
1542 details_container_->set_ignore_layouts(false); 1546 details_container_->set_ignore_layouts(false);
1543 } 1547 }
1544 1548
1545 if (error_bubble_) 1549 if (error_bubble_)
1546 error_bubble_->UpdatePosition(); 1550 error_bubble_->UpdatePosition();
1547 } 1551 }
1548 1552
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
1736 } 1740 }
1737 1741
1738 // Show an error bubble when the user focuses the input. 1742 // Show an error bubble when the user focuses the input.
1739 if (focused_now) { 1743 if (focused_now) {
1740 focused_now->ScrollRectToVisible(focused_now->GetLocalBounds()); 1744 focused_now->ScrollRectToVisible(focused_now->GetLocalBounds());
1741 ShowErrorBubbleForViewIfNecessary(focused_now); 1745 ShowErrorBubbleForViewIfNecessary(focused_now);
1742 } 1746 }
1743 } 1747 }
1744 1748
1745 void AutofillDialogViews::OnSelectedIndexChanged(views::Combobox* combobox) { 1749 void AutofillDialogViews::OnSelectedIndexChanged(views::Combobox* combobox) {
1746 DetailsGroup* group = GroupForView(combobox); 1750 DialogSection section = GroupForView(combobox)->section;
1747 ValidateGroup(*group, VALIDATE_EDIT); 1751
1748 SetEditabilityForSection(group->section); 1752 delegate_->ComboboxItemSelected(TypeForCombobox(combobox),
1753 combobox->selected_index());
1754 // NOTE: |combobox| may have been deleted.
1755
1756 ValidateGroup(*GroupForSection(section), VALIDATE_EDIT);
1757 SetEditabilityForSection(section);
1749 } 1758 }
1750 1759
1751 void AutofillDialogViews::StyledLabelLinkClicked(const gfx::Range& range, 1760 void AutofillDialogViews::StyledLabelLinkClicked(const gfx::Range& range,
1752 int event_flags) { 1761 int event_flags) {
1753 delegate_->LegalDocumentLinkClicked(range); 1762 delegate_->LegalDocumentLinkClicked(range);
1754 } 1763 }
1755 1764
1756 void AutofillDialogViews::OnMenuButtonClicked(views::View* source, 1765 void AutofillDialogViews::OnMenuButtonClicked(views::View* source,
1757 const gfx::Point& point) { 1766 const gfx::Point& point) {
1758 DCHECK_EQ(kSuggestedButtonClassName, source->GetClassName()); 1767 DCHECK_EQ(kSuggestedButtonClassName, source->GetClassName());
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1896 AddChildView(sign_in_web_view_); 1905 AddChildView(sign_in_web_view_);
1897 1906
1898 overlay_view_ = new OverlayView(delegate_); 1907 overlay_view_ = new OverlayView(delegate_);
1899 overlay_view_->SetVisible(false); 1908 overlay_view_->SetVisible(false);
1900 } 1909 }
1901 1910
1902 views::View* AutofillDialogViews::CreateDetailsContainer() { 1911 views::View* AutofillDialogViews::CreateDetailsContainer() {
1903 details_container_ = new DetailsContainerView( 1912 details_container_ = new DetailsContainerView(
1904 base::Bind(&AutofillDialogViews::DetailsContainerBoundsChanged, 1913 base::Bind(&AutofillDialogViews::DetailsContainerBoundsChanged,
1905 base::Unretained(this))); 1914 base::Unretained(this)));
1915
1906 // A box layout is used because it respects widget visibility. 1916 // A box layout is used because it respects widget visibility.
1907 details_container_->SetLayoutManager( 1917 details_container_->SetLayoutManager(
1908 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); 1918 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
1909 for (DetailGroupMap::iterator iter = detail_groups_.begin(); 1919 for (DetailGroupMap::iterator iter = detail_groups_.begin();
1910 iter != detail_groups_.end(); ++iter) { 1920 iter != detail_groups_.end(); ++iter) {
1911 CreateDetailsSection(iter->second.section); 1921 CreateDetailsSection(iter->second.section);
1912 details_container_->AddChildView(iter->second.container); 1922 details_container_->AddChildView(iter->second.container);
1913 } 1923 }
1914 1924
1915 return details_container_; 1925 return details_container_;
(...skipping 12 matching lines...) Expand all
1928 UpdateDetailsGroupState(*group); 1938 UpdateDetailsGroupState(*group);
1929 } 1939 }
1930 1940
1931 views::View* AutofillDialogViews::CreateInputsContainer(DialogSection section) { 1941 views::View* AutofillDialogViews::CreateInputsContainer(DialogSection section) {
1932 // The |info_view| holds |manual_inputs| and |suggested_info|, allowing the 1942 // The |info_view| holds |manual_inputs| and |suggested_info|, allowing the
1933 // dialog to toggle which is shown. 1943 // dialog to toggle which is shown.
1934 views::View* info_view = new views::View(); 1944 views::View* info_view = new views::View();
1935 info_view->SetLayoutManager( 1945 info_view->SetLayoutManager(
1936 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); 1946 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
1937 1947
1938 views::View* manual_inputs = InitInputsView(section); 1948 DetailsGroup* group = GroupForSection(section);
1939 info_view->AddChildView(manual_inputs); 1949 group->manual_input = new views::View();
1940 SuggestionView* suggested_info = new SuggestionView(this); 1950 InitInputsView(section);
1941 info_view->AddChildView(suggested_info); 1951 info_view->AddChildView(group->manual_input);
1942 1952
1943 DetailsGroup* group = GroupForSection(section); 1953 group->suggested_info = new SuggestionView(this);
1954 info_view->AddChildView(group->suggested_info);
1955
1944 // TODO(estade): It might be slightly more OO if this button were created 1956 // TODO(estade): It might be slightly more OO if this button were created
1945 // and listened to by the section container. 1957 // and listened to by the section container.
1946 group->suggested_button = new SuggestedButton(this); 1958 group->suggested_button = new SuggestedButton(this);
1947 group->manual_input = manual_inputs;
1948 group->suggested_info = suggested_info;
1949 1959
1950 return info_view; 1960 return info_view;
1951 } 1961 }
1952 1962
1953 // TODO(estade): we should be using Chrome-style constrained window padding 1963 // TODO(estade): we should be using Chrome-style constrained window padding
1954 // values. 1964 // values.
1955 views::View* AutofillDialogViews::InitInputsView(DialogSection section) { 1965 void AutofillDialogViews::InitInputsView(DialogSection section) {
1956 const DetailInputs& inputs = delegate_->RequestedFieldsForSection(section); 1966 DetailsGroup* group = GroupForSection(section);
1957 TextfieldMap* textfields = &GroupForSection(section)->textfields; 1967 EraseInvalidViewsInGroup(group);
1958 ComboboxMap* comboboxes = &GroupForSection(section)->comboboxes;
1959 1968
1960 views::View* view = new views::View(); 1969 TextfieldMap* textfields = &group->textfields;
1970 textfields->clear();
1971
1972 ComboboxMap* comboboxes = &group->comboboxes;
1973 comboboxes->clear();
1974
1975 views::View* view = group->manual_input;
1976 view->RemoveAllChildViews(true);
1977
1961 views::GridLayout* layout = new views::GridLayout(view); 1978 views::GridLayout* layout = new views::GridLayout(view);
1962 view->SetLayoutManager(layout); 1979 view->SetLayoutManager(layout);
1963 1980
1964 int column_set_id = 0; 1981 int column_set_id = 0;
1982 const DetailInputs& inputs = delegate_->RequestedFieldsForSection(section);
1965 for (DetailInputs::const_iterator it = inputs.begin(); 1983 for (DetailInputs::const_iterator it = inputs.begin();
1966 it != inputs.end(); ++it) { 1984 it != inputs.end(); ++it) {
1967 const DetailInput& input = *it; 1985 const DetailInput& input = *it;
1986
1968 ui::ComboboxModel* input_model = 1987 ui::ComboboxModel* input_model =
1969 delegate_->ComboboxModelForAutofillType(input.type); 1988 delegate_->ComboboxModelForAutofillType(input.type);
1970 scoped_ptr<views::View> view_to_add; 1989 scoped_ptr<views::View> view_to_add;
1971 if (input_model) { 1990 if (input_model) {
1972 views::Combobox* combobox = new views::Combobox(input_model); 1991 views::Combobox* combobox = new views::Combobox(input_model);
1973 combobox->set_listener(this); 1992 combobox->set_listener(this);
1974 comboboxes->insert(std::make_pair(input.type, combobox)); 1993 comboboxes->insert(std::make_pair(input.type, combobox));
1975 SelectComboboxValueOrSetToDefault(combobox, input.initial_value); 1994 SelectComboboxValueOrSetToDefault(combobox, input.initial_value);
1976 view_to_add.reset(combobox); 1995 view_to_add.reset(combobox);
1977 } else { 1996 } else {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2020 views::GridLayout::FILL, views::GridLayout::FILL, 2039 views::GridLayout::FILL, views::GridLayout::FILL,
2021 1, 0); 2040 1, 0);
2022 2041
2023 if (input.length == DetailInput::LONG || 2042 if (input.length == DetailInput::LONG ||
2024 input.length == DetailInput::SHORT_EOL) { 2043 input.length == DetailInput::SHORT_EOL) {
2025 ++column_set_id; 2044 ++column_set_id;
2026 } 2045 }
2027 } 2046 }
2028 2047
2029 SetIconsForSection(section); 2048 SetIconsForSection(section);
2030
2031 return view;
2032 } 2049 }
2033 2050
2034 void AutofillDialogViews::ShowDialogInMode(DialogMode dialog_mode) { 2051 void AutofillDialogViews::ShowDialogInMode(DialogMode dialog_mode) {
2035 loading_shield_->SetVisible(dialog_mode == LOADING); 2052 loading_shield_->SetVisible(dialog_mode == LOADING);
2036 sign_in_web_view_->SetVisible(dialog_mode == SIGN_IN); 2053 sign_in_web_view_->SetVisible(dialog_mode == SIGN_IN);
2037 notification_area_->SetVisible(dialog_mode == DETAIL_INPUT); 2054 notification_area_->SetVisible(dialog_mode == DETAIL_INPUT);
2038 scrollable_area_->SetVisible(dialog_mode == DETAIL_INPUT); 2055 scrollable_area_->SetVisible(dialog_mode == DETAIL_INPUT);
2039 FocusInitialView(); 2056 FocusInitialView();
2040 } 2057 }
2041 2058
2042 void AutofillDialogViews::UpdateSectionImpl( 2059 void AutofillDialogViews::UpdateSectionImpl(
2043 DialogSection section, 2060 DialogSection section,
2044 bool clobber_inputs) { 2061 bool clobber_inputs) {
2045 // Reset all validity marks for this section.
2046 if (clobber_inputs)
2047 MarkInputsInvalid(section, ValidityMessages(), true);
2048
2049 const DetailInputs& updated_inputs =
2050 delegate_->RequestedFieldsForSection(section);
2051 DetailsGroup* group = GroupForSection(section); 2062 DetailsGroup* group = GroupForSection(section);
2052 2063
2053 for (DetailInputs::const_iterator iter = updated_inputs.begin(); 2064 if (clobber_inputs) {
2054 iter != updated_inputs.end(); ++iter) { 2065 InitInputsView(section);
2055 const DetailInput& input = *iter; 2066 } else {
2056 TextfieldMap::iterator text_mapping = group->textfields.find(input.type); 2067 const DetailInputs& updated_inputs =
2068 delegate_->RequestedFieldsForSection(section);
2057 2069
2058 if (text_mapping != group->textfields.end()) { 2070 for (DetailInputs::const_iterator iter = updated_inputs.begin();
2059 DecoratedTextfield* decorated = text_mapping->second; 2071 iter != updated_inputs.end(); ++iter) {
2060 if (decorated->text().empty() || clobber_inputs) 2072 const DetailInput& input = *iter;
2061 decorated->SetText(input.initial_value); 2073
2074 TextfieldMap::iterator text_mapping = group->textfields.find(input.type);
2075 if (text_mapping != group->textfields.end()) {
2076 DecoratedTextfield* decorated = text_mapping->second;
2077 if (decorated->text().empty())
2078 decorated->SetText(input.initial_value);
2079 }
2080
2081 ComboboxMap::iterator combo_mapping = group->comboboxes.find(input.type);
2082 if (combo_mapping != group->comboboxes.end()) {
2083 views::Combobox* combobox = combo_mapping->second;
2084 if (combobox->selected_index() == combobox->model()->GetDefaultIndex())
2085 SelectComboboxValueOrSetToDefault(combobox, input.initial_value);
2086 }
2062 } 2087 }
2063 2088
2064 ComboboxMap::iterator combo_mapping = group->comboboxes.find(input.type); 2089 SetIconsForSection(section);
2065 if (combo_mapping != group->comboboxes.end()) {
2066 views::Combobox* combobox = combo_mapping->second;
2067 if (combobox->selected_index() == combobox->model()->GetDefaultIndex() ||
2068 clobber_inputs) {
2069 SelectComboboxValueOrSetToDefault(combobox, input.initial_value);
2070 }
2071 }
2072 } 2090 }
2073 2091
2074 SetIconsForSection(section);
2075 SetEditabilityForSection(section); 2092 SetEditabilityForSection(section);
2076 UpdateDetailsGroupState(*group); 2093 UpdateDetailsGroupState(*group);
2077 } 2094 }
2078 2095
2079 void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) { 2096 void AutofillDialogViews::UpdateDetailsGroupState(const DetailsGroup& group) {
2080 const SuggestionState& suggestion_state = 2097 const SuggestionState& suggestion_state =
2081 delegate_->SuggestionStateForSection(group.section); 2098 delegate_->SuggestionStateForSection(group.section);
2082 group.suggested_info->SetState(suggestion_state); 2099 group.suggested_info->SetState(suggestion_state);
2083 group.manual_input->SetVisible(!suggestion_state.visible); 2100 group.manual_input->SetVisible(!suggestion_state.visible);
2084 2101
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
2174 SetValidityForInput(iter->second, message.text); 2191 SetValidityForInput(iter->second, message.text);
2175 } 2192 }
2176 for (ComboboxMap::const_iterator iter = group->comboboxes.begin(); 2193 for (ComboboxMap::const_iterator iter = group->comboboxes.begin();
2177 iter != group->comboboxes.end(); ++iter) { 2194 iter != group->comboboxes.end(); ++iter) {
2178 const ValidityMessage& message = 2195 const ValidityMessage& message =
2179 messages.GetMessageOrDefault(iter->first); 2196 messages.GetMessageOrDefault(iter->first);
2180 if (overwrite_unsure || message.sure) 2197 if (overwrite_unsure || message.sure)
2181 SetValidityForInput(iter->second, message.text); 2198 SetValidityForInput(iter->second, message.text);
2182 } 2199 }
2183 } else { 2200 } else {
2184 // Purge invisible views from |validity_map_|. 2201 EraseInvalidViewsInGroup(group);
2185 std::map<views::View*, base::string16>::iterator it;
2186 for (it = validity_map_.begin(); it != validity_map_.end();) {
2187 DCHECK(GroupForView(it->first));
2188 if (GroupForView(it->first) == group)
2189 validity_map_.erase(it++);
2190 else
2191 ++it;
2192 }
2193 2202
2194 if (section == GetCreditCardSection()) { 2203 if (section == GetCreditCardSection()) {
2195 // Special case CVC as it's not part of |group->manual_input|. 2204 // Special case CVC as it's not part of |group->manual_input|.
2196 const ValidityMessage& message = 2205 const ValidityMessage& message =
2197 messages.GetMessageOrDefault(CREDIT_CARD_VERIFICATION_CODE); 2206 messages.GetMessageOrDefault(CREDIT_CARD_VERIFICATION_CODE);
2198 if (overwrite_unsure || message.sure) { 2207 if (overwrite_unsure || message.sure) {
2199 SetValidityForInput(group->suggested_info->decorated_textfield(), 2208 SetValidityForInput(group->suggested_info->decorated_textfield(),
2200 message.text); 2209 message.text);
2201 } 2210 }
2202 } 2211 }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
2364 // inputs instead of directly editable inputs. Those are accessed via 2373 // inputs instead of directly editable inputs. Those are accessed via
2365 // |suggested_info|. 2374 // |suggested_info|.
2366 if (decorated && 2375 if (decorated &&
2367 decorated == group->suggested_info->decorated_textfield()) { 2376 decorated == group->suggested_info->decorated_textfield()) {
2368 return group; 2377 return group;
2369 } 2378 }
2370 } 2379 }
2371 return NULL; 2380 return NULL;
2372 } 2381 }
2373 2382
2383 void AutofillDialogViews::EraseInvalidViewsInGroup(const DetailsGroup* group) {
2384 std::map<views::View*, base::string16>::iterator it = validity_map_.begin();
2385 while (it != validity_map_.end()) {
2386 if (GroupForView(it->first) == group)
2387 validity_map_.erase(it++);
2388 else
2389 ++it;
2390 }
2391 }
2392
2374 views::Textfield* AutofillDialogViews::TextfieldForType( 2393 views::Textfield* AutofillDialogViews::TextfieldForType(
2375 ServerFieldType type) { 2394 ServerFieldType type) {
2376 for (DetailGroupMap::iterator iter = detail_groups_.begin(); 2395 for (DetailGroupMap::iterator iter = detail_groups_.begin();
2377 iter != detail_groups_.end(); ++iter) { 2396 iter != detail_groups_.end(); ++iter) {
2378 const DetailsGroup& group = iter->second; 2397 const DetailsGroup& group = iter->second;
2379 TextfieldMap::const_iterator text_mapping = group.textfields.find(type); 2398 TextfieldMap::const_iterator text_mapping = group.textfields.find(type);
2380 if (text_mapping != group.textfields.end()) 2399 if (text_mapping != group.textfields.end())
2381 return text_mapping->second; 2400 return text_mapping->second;
2382 } 2401 }
2383 2402
2384 return NULL; 2403 return NULL;
2385 } 2404 }
2386 2405
2387 views::Combobox* AutofillDialogViews::ComboboxForType( 2406 views::Combobox* AutofillDialogViews::ComboboxForType(
2388 ServerFieldType type) { 2407 ServerFieldType type) {
2389 for (DetailGroupMap::iterator iter = detail_groups_.begin(); 2408 for (DetailGroupMap::iterator iter = detail_groups_.begin();
2390 iter != detail_groups_.end(); ++iter) { 2409 iter != detail_groups_.end(); ++iter) {
2391 const DetailsGroup& group = iter->second; 2410 const DetailsGroup& group = iter->second;
2392 ComboboxMap::const_iterator combo_mapping = group.comboboxes.find(type); 2411 ComboboxMap::const_iterator combo_mapping = group.comboboxes.find(type);
2393 if (combo_mapping != group.comboboxes.end()) 2412 if (combo_mapping != group.comboboxes.end())
2394 return combo_mapping->second; 2413 return combo_mapping->second;
2395 } 2414 }
2396 2415
2397 return NULL; 2416 return NULL;
2398 } 2417 }
2399 2418
2419 ServerFieldType AutofillDialogViews::TypeForCombobox(
2420 const views::Combobox* combobox) const {
2421 for (DetailGroupMap::const_iterator it = detail_groups_.begin();
2422 it != detail_groups_.end(); ++it) {
2423 const DetailsGroup& group = it->second;
2424 for (ComboboxMap::const_iterator combo_it = group.comboboxes.begin();
2425 combo_it != group.comboboxes.end(); ++combo_it) {
2426 if (combo_it->second == combobox)
2427 return combo_it->first;
2428 }
2429 }
2430 NOTREACHED();
2431 return UNKNOWN_TYPE;
2432 }
2433
2400 void AutofillDialogViews::DetailsContainerBoundsChanged() { 2434 void AutofillDialogViews::DetailsContainerBoundsChanged() {
2401 if (error_bubble_) 2435 if (error_bubble_)
2402 error_bubble_->UpdatePosition(); 2436 error_bubble_->UpdatePosition();
2403 } 2437 }
2404 2438
2405 void AutofillDialogViews::SetIconsForSection(DialogSection section) { 2439 void AutofillDialogViews::SetIconsForSection(DialogSection section) {
2406 FieldValueMap user_input; 2440 FieldValueMap user_input;
2407 GetUserInput(section, &user_input); 2441 GetUserInput(section, &user_input);
2408 FieldIconMap field_icons = delegate_->IconsForFields(user_input); 2442 FieldIconMap field_icons = delegate_->IconsForFields(user_input);
2409 TextfieldMap* textfields = &GroupForSection(section)->textfields; 2443 TextfieldMap* textfields = &GroupForSection(section)->textfields;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2448 AutofillDialogViews::DetailsGroup::DetailsGroup(DialogSection section) 2482 AutofillDialogViews::DetailsGroup::DetailsGroup(DialogSection section)
2449 : section(section), 2483 : section(section),
2450 container(NULL), 2484 container(NULL),
2451 manual_input(NULL), 2485 manual_input(NULL),
2452 suggested_info(NULL), 2486 suggested_info(NULL),
2453 suggested_button(NULL) {} 2487 suggested_button(NULL) {}
2454 2488
2455 AutofillDialogViews::DetailsGroup::~DetailsGroup() {} 2489 AutofillDialogViews::DetailsGroup::~DetailsGroup() {}
2456 2490
2457 } // namespace autofill 2491 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698