Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/translate/translate_bubble_view.h" | 5 #include "chrome/browser/ui/views/translate/translate_bubble_view.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/i18n/string_compare.h" | 13 #include "base/i18n/string_compare.h" |
| 14 #include "base/memory/singleton.h" | 14 #include "base/memory/singleton.h" |
| 15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
| 16 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
| 17 #include "chrome/browser/browser_process.h" | 17 #include "chrome/browser/browser_process.h" |
| 18 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
| 19 #include "chrome/browser/translate/chrome_translate_client.h" | 19 #include "chrome/browser/translate/chrome_translate_client.h" |
| 20 #include "chrome/browser/translate/translate_service.h" | 20 #include "chrome/browser/translate/translate_service.h" |
| 21 #include "chrome/browser/ui/chrome_pages.h" | 21 #include "chrome/browser/ui/chrome_pages.h" |
| 22 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h" | 22 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h" |
| 23 #include "chrome/browser/ui/translate/translate_bubble_view_state_transition.h" | |
| 23 #include "chrome/common/url_constants.h" | 24 #include "chrome/common/url_constants.h" |
| 24 #include "chrome/grit/generated_resources.h" | 25 #include "chrome/grit/generated_resources.h" |
| 25 #include "components/prefs/pref_service.h" | 26 #include "components/prefs/pref_service.h" |
| 26 #include "components/translate/core/browser/translate_download_manager.h" | 27 #include "components/translate/core/browser/translate_download_manager.h" |
| 27 #include "components/translate/core/browser/translate_manager.h" | 28 #include "components/translate/core/browser/translate_manager.h" |
| 29 #include "components/translate/core/browser/translate_prefs.h" | |
| 28 #include "components/translate/core/browser/translate_ui_delegate.h" | 30 #include "components/translate/core/browser/translate_ui_delegate.h" |
| 29 #include "content/public/browser/web_contents.h" | 31 #include "content/public/browser/web_contents.h" |
| 30 #include "grit/components_strings.h" | 32 #include "grit/components_strings.h" |
| 33 #include "grit/ui_resources.h" | |
| 31 #include "ui/base/l10n/l10n_util.h" | 34 #include "ui/base/l10n/l10n_util.h" |
| 32 #include "ui/base/models/combobox_model.h" | 35 #include "ui/base/models/combobox_model.h" |
| 33 #include "ui/base/models/simple_combobox_model.h" | 36 #include "ui/base/models/simple_combobox_model.h" |
| 37 #include "ui/base/models/simple_menu_model.h" | |
|
msw
2016/05/03 18:16:41
nit: not needed, included by header.
ftang
2016/05/03 20:34:50
Done.
| |
| 38 #include "ui/base/resource/resource_bundle.h" | |
| 39 #include "ui/views/bubble/bubble_frame_view.h" | |
| 40 #include "ui/views/controls/button/blue_button.h" | |
| 34 #include "ui/views/controls/button/checkbox.h" | 41 #include "ui/views/controls/button/checkbox.h" |
| 35 #include "ui/views/controls/button/label_button.h" | 42 #include "ui/views/controls/button/label_button.h" |
| 43 #include "ui/views/controls/button/menu_button.h" | |
| 36 #include "ui/views/controls/combobox/combobox.h" | 44 #include "ui/views/controls/combobox/combobox.h" |
| 37 #include "ui/views/controls/label.h" | 45 #include "ui/views/controls/label.h" |
| 38 #include "ui/views/controls/link.h" | 46 #include "ui/views/controls/link.h" |
| 47 #include "ui/views/controls/styled_label.h" | |
| 39 #include "ui/views/layout/box_layout.h" | 48 #include "ui/views/layout/box_layout.h" |
| 40 #include "ui/views/layout/grid_layout.h" | 49 #include "ui/views/layout/grid_layout.h" |
| 41 #include "ui/views/layout/layout_constants.h" | 50 #include "ui/views/layout/layout_constants.h" |
| 42 #include "ui/views/widget/widget.h" | 51 #include "ui/views/widget/widget.h" |
| 43 | 52 |
| 44 namespace { | 53 namespace { |
| 45 | 54 |
| 55 const char kTranslateBubbleUIEvent[] = "Translate.BubbleUiEvent"; | |
| 56 | |
| 57 views::LabelButton* CreateBlueButton(views::ButtonListener* listener, | |
| 58 const base::string16& label, | |
| 59 int id) { | |
| 60 views::LabelButton* button = new views::BlueButton(listener, label); | |
| 61 button->set_id(id); | |
| 62 return button; | |
| 63 } | |
| 64 | |
| 46 views::LabelButton* CreateLabelButton(views::ButtonListener* listener, | 65 views::LabelButton* CreateLabelButton(views::ButtonListener* listener, |
| 47 const base::string16& label, | 66 const base::string16& label, |
| 48 int id) { | 67 int id) { |
| 49 views::LabelButton* button = new views::LabelButton(listener, label); | 68 views::LabelButton* button = new views::LabelButton(listener, label); |
| 50 button->set_id(id); | 69 button->set_id(id); |
| 51 button->SetStyle(views::Button::STYLE_BUTTON); | 70 button->SetStyle(views::Button::STYLE_BUTTON); |
| 52 return button; | 71 return button; |
| 53 } | 72 } |
| 54 | 73 |
| 55 views::Link* CreateLink(views::LinkListener* listener, | 74 views::Link* CreateLink(views::LinkListener* listener, |
| 75 const base::string16& text, | |
| 76 int id) { | |
| 77 views::Link* link = new views::Link(text); | |
| 78 link->set_listener(listener); | |
| 79 link->set_id(id); | |
| 80 return link; | |
| 81 } | |
| 82 | |
| 83 views::Link* CreateLink(views::LinkListener* listener, | |
| 56 int resource_id, | 84 int resource_id, |
| 57 int id) { | 85 int id) { |
| 58 views::Link* link = new views::Link( | 86 return CreateLink(listener, l10n_util::GetStringUTF16(resource_id), id); |
| 59 l10n_util::GetStringUTF16(resource_id)); | 87 } |
| 60 link->set_listener(listener); | 88 |
| 61 link->set_id(id); | 89 void AddIconToLayout(views::GridLayout* layout) { |
| 62 return link; | 90 views::ImageView* icon = new views::ImageView(); |
| 91 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | |
| 92 icon->SetImage(bundle.GetImageNamed(IDR_TRANSLATE_ICON_BUBBLE).ToImageSkia()); | |
| 93 layout->AddView(icon); | |
| 63 } | 94 } |
| 64 | 95 |
| 65 } // namespace | 96 } // namespace |
| 66 | 97 |
| 67 // static | 98 // static |
| 68 TranslateBubbleView* TranslateBubbleView::translate_bubble_view_ = NULL; | 99 TranslateBubbleView* TranslateBubbleView::translate_bubble_view_ = NULL; |
| 69 | 100 |
| 70 TranslateBubbleView::~TranslateBubbleView() { | 101 TranslateBubbleView::~TranslateBubbleView() { |
| 71 // A child view could refer to a model which is owned by this class when | 102 // A child view could refer to a model which is owned by this class when |
| 72 // the child view is destructed. For example, |source_language_combobx_model_| | 103 // the child view is destructed. For example, |source_language_combobx_model_| |
| 73 // is referred by Combobox's destructor. Before destroying the models, | 104 // is referred by Combobox's destructor. Before destroying the models, |
| 74 // removing the child views is needed. | 105 // removing the child views is needed. |
| 75 RemoveAllChildViews(true); | 106 RemoveAllChildViews(true); |
| 76 } | 107 } |
| 77 | 108 |
| 78 // static | 109 // static |
| 79 views::Widget* TranslateBubbleView::ShowBubble( | 110 views::Widget* TranslateBubbleView::ShowBubble( |
| 80 views::View* anchor_view, | 111 views::View* anchor_view, |
| 81 content::WebContents* web_contents, | 112 content::WebContents* web_contents, |
| 82 translate::TranslateStep step, | 113 translate::TranslateStep step, |
| 83 translate::TranslateErrors::Type error_type, | 114 translate::TranslateErrors::Type error_type, |
| 84 DisplayReason reason) { | 115 DisplayReason reason) { |
| 85 if (translate_bubble_view_) { | 116 if (translate_bubble_view_) { |
| 86 // When the user reads the advanced setting panel, the bubble should not be | 117 // When the user reads the advanced setting panel, the bubble should not be |
| 87 // changed because they are focusing on the bubble. | 118 // changed because they are focusing on the bubble. |
| 88 if (translate_bubble_view_->web_contents() == web_contents && | 119 if (translate_bubble_view_->web_contents() == web_contents && |
| 89 translate_bubble_view_->model()->GetViewState() == | 120 translate_bubble_view_->model()->GetViewState() == |
| 90 TranslateBubbleModel::VIEW_STATE_ADVANCED) { | 121 TranslateBubbleModel::VIEW_STATE_ADVANCED) { |
| 91 return nullptr; | 122 return nullptr; |
| 92 } | 123 } |
| 93 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) { | 124 if (step != translate::TRANSLATE_STEP_TRANSLATE_ERROR) { |
| 94 TranslateBubbleModel::ViewState state = | 125 TranslateBubbleModel::ViewState state = |
| 95 TranslateBubbleModelImpl::TranslateStepToViewState(step); | 126 TranslateBubbleModelImpl::TranslateStepToViewState(step); |
| 96 translate_bubble_view_->SwitchView(state); | 127 translate_bubble_view_->SwitchView(state); |
| 97 } else { | 128 } else { |
| 98 translate_bubble_view_->SwitchToErrorView(error_type); | 129 translate_bubble_view_->SwitchToErrorView(error_type); |
| 99 } | 130 } |
| 100 return nullptr; | 131 return nullptr; |
| 101 } else { | 132 } else { |
| 102 if (step == translate::TRANSLATE_STEP_AFTER_TRANSLATE && | 133 if (step == translate::TRANSLATE_STEP_AFTER_TRANSLATE && |
| 103 reason == AUTOMATIC) { | 134 reason == AUTOMATIC) { |
| 104 return nullptr; | 135 return nullptr; |
| 105 } | 136 } |
| 106 } | 137 } |
| 107 | 138 |
| 108 std::string source_language; | 139 std::string source_language; |
| 109 std::string target_language; | 140 std::string target_language; |
| 110 ChromeTranslateClient::GetTranslateLanguages( | 141 ChromeTranslateClient::GetTranslateLanguages(web_contents, &source_language, |
| 111 web_contents, &source_language, &target_language); | 142 &target_language); |
| 112 | 143 |
| 113 std::unique_ptr<translate::TranslateUIDelegate> ui_delegate( | 144 std::unique_ptr<translate::TranslateUIDelegate> ui_delegate( |
| 114 new translate::TranslateUIDelegate( | 145 new translate::TranslateUIDelegate( |
| 115 ChromeTranslateClient::GetManagerFromWebContents(web_contents) | 146 ChromeTranslateClient::GetManagerFromWebContents(web_contents) |
| 116 ->GetWeakPtr(), | 147 ->GetWeakPtr(), |
| 117 source_language, target_language)); | 148 source_language, target_language)); |
| 118 std::unique_ptr<TranslateBubbleModel> model( | 149 std::unique_ptr<TranslateBubbleModel> model( |
| 119 new TranslateBubbleModelImpl(step, std::move(ui_delegate))); | 150 new TranslateBubbleModelImpl(step, std::move(ui_delegate))); |
| 120 TranslateBubbleView* view = new TranslateBubbleView( | 151 TranslateBubbleView* view = new TranslateBubbleView( |
| 121 anchor_view, std::move(model), error_type, web_contents); | 152 anchor_view, std::move(model), error_type, web_contents); |
| 122 views::Widget* bubble_widget = | 153 views::Widget* bubble_widget = |
| 123 views::BubbleDialogDelegateView::CreateBubble(view); | 154 views::BubbleDialogDelegateView::CreateBubble(view); |
| 124 view->ShowForReason(reason); | 155 view->ShowForReason(reason); |
| 125 return bubble_widget; | 156 return bubble_widget; |
| 126 } | 157 } |
| 127 | 158 |
| 128 // static | 159 // static |
| 129 void TranslateBubbleView::CloseCurrentBubble() { | 160 void TranslateBubbleView::CloseCurrentBubble() { |
| 130 if (translate_bubble_view_) | 161 if (translate_bubble_view_) |
| 131 translate_bubble_view_->CloseBubble(); | 162 translate_bubble_view_->CloseBubble(); |
| 132 } | 163 } |
| 133 | 164 |
| 134 // static | 165 // static |
| 135 TranslateBubbleView* TranslateBubbleView::GetCurrentBubble() { | 166 TranslateBubbleView* TranslateBubbleView::GetCurrentBubble() { |
| 136 return translate_bubble_view_; | 167 return translate_bubble_view_; |
| 137 } | 168 } |
| 138 | 169 |
| 139 void TranslateBubbleView::Init() { | 170 void TranslateBubbleView::Init() { |
| 140 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, | 171 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
| 141 0, 0, 0)); | |
| 142 | 172 |
| 143 before_translate_view_ = CreateViewBeforeTranslate(); | 173 before_translate_view_ = CreateViewBeforeTranslate(); |
| 144 translating_view_ = CreateViewTranslating(); | 174 translating_view_ = CreateViewTranslating(); |
| 145 after_translate_view_ = CreateViewAfterTranslate(); | 175 after_translate_view_ = CreateViewAfterTranslate(); |
| 146 error_view_ = CreateViewError(); | 176 error_view_ = CreateViewError(); |
| 147 advanced_view_ = CreateViewAdvanced(); | 177 advanced_view_ = CreateViewAdvanced(); |
| 148 | 178 |
| 149 AddChildView(before_translate_view_); | 179 AddChildView(before_translate_view_); |
| 150 AddChildView(translating_view_); | 180 AddChildView(translating_view_); |
| 151 AddChildView(after_translate_view_); | 181 AddChildView(after_translate_view_); |
| 152 AddChildView(error_view_); | 182 AddChildView(error_view_); |
| 153 AddChildView(advanced_view_); | 183 AddChildView(advanced_view_); |
| 154 | 184 |
| 155 AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)); | 185 AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)); |
| 156 | 186 |
| 157 UpdateChildVisibilities(); | 187 UpdateChildVisibilities(); |
| 158 | 188 |
| 159 if (model_->GetViewState() == TranslateBubbleModel::VIEW_STATE_ERROR) | 189 if (model_->GetViewState() == TranslateBubbleModel::VIEW_STATE_ERROR) |
| 160 model_->ShowError(error_type_); | 190 model_->ShowError(error_type_); |
| 161 } | 191 } |
| 162 | 192 |
| 163 void TranslateBubbleView::ButtonPressed(views::Button* sender, | 193 void TranslateBubbleView::ButtonPressed(views::Button* sender, |
| 164 const ui::Event& event) { | 194 const ui::Event& event) { |
| 165 HandleButtonPressed(static_cast<ButtonID>(sender->id())); | 195 HandleButtonPressed(static_cast<ButtonID>(sender->id())); |
| 166 } | 196 } |
| 167 | 197 |
| 198 bool TranslateBubbleView::ShouldShowCloseButton() const { | |
| 199 return use_2016_q2_ui_; | |
| 200 } | |
| 201 | |
| 168 void TranslateBubbleView::WindowClosing() { | 202 void TranslateBubbleView::WindowClosing() { |
| 169 // The operations for |model_| are valid only when a WebContents is alive. | 203 // The operations for |model_| are valid only when a WebContents is alive. |
| 170 // TODO(hajimehoshi): TranslateBubbleViewModel(Impl) should not hold a | 204 // TODO(hajimehoshi): TranslateBubbleViewModel(Impl) should not hold a |
| 171 // WebContents as a member variable because the WebContents might be destroyed | 205 // WebContents as a member variable because the WebContents might be destroyed |
| 172 // while the TranslateBubbleViewModel(Impl) is still alive. Instead, | 206 // while the TranslateBubbleViewModel(Impl) is still alive. Instead, |
| 173 // TranslateBubbleViewModel should take a reference of a WebContents at each | 207 // TranslateBubbleViewModel should take a reference of a WebContents at each |
| 174 // method. (crbug/320497) | 208 // method. (crbug/320497) |
| 175 if (web_contents()) | 209 if (web_contents()) |
| 176 model_->OnBubbleClosing(); | 210 model_->OnBubbleClosing(); |
| 177 | 211 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 225 } | 259 } |
| 226 | 260 |
| 227 void TranslateBubbleView::OnPerformAction(views::Combobox* combobox) { | 261 void TranslateBubbleView::OnPerformAction(views::Combobox* combobox) { |
| 228 HandleComboboxPerformAction(static_cast<ComboboxID>(combobox->id())); | 262 HandleComboboxPerformAction(static_cast<ComboboxID>(combobox->id())); |
| 229 } | 263 } |
| 230 | 264 |
| 231 void TranslateBubbleView::LinkClicked(views::Link* source, int event_flags) { | 265 void TranslateBubbleView::LinkClicked(views::Link* source, int event_flags) { |
| 232 HandleLinkClicked(static_cast<LinkID>(source->id())); | 266 HandleLinkClicked(static_cast<LinkID>(source->id())); |
| 233 } | 267 } |
| 234 | 268 |
| 269 void TranslateBubbleView::OnMenuButtonClicked(views::MenuButton* source, | |
| 270 const gfx::Point& point, | |
| 271 const ui::Event* event) { | |
| 272 if (!denial_menu_runner_) { | |
| 273 base::string16 original_language_name = | |
| 274 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); | |
| 275 denial_menu_model_.reset(new ui::SimpleMenuModel(this)); | |
| 276 denial_menu_model_->AddItem( | |
| 277 DenialMenuItem::NEVER_TRANSLATE_LANGUAGE, | |
| 278 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG, | |
| 279 original_language_name)); | |
| 280 | |
| 281 denial_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); | |
| 282 | |
| 283 denial_menu_model_->AddItemWithStringId( | |
| 284 DenialMenuItem::NEVER_TRANSLATE_SITE, | |
| 285 IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE); | |
| 286 | |
| 287 denial_menu_runner_.reset( | |
| 288 new views::MenuRunner(denial_menu_model_.get(), 0)); | |
| 289 } | |
| 290 gfx::Rect screen_bounds = source->GetBoundsInScreen(); | |
| 291 screen_bounds.Inset(source->GetInsets()); | |
| 292 if (denial_menu_runner_->RunMenuAt(source->GetWidget(), source, screen_bounds, | |
| 293 views::MENU_ANCHOR_TOPRIGHT, | |
| 294 ui::MENU_SOURCE_MOUSE) == | |
| 295 views::MenuRunner::MENU_DELETED) | |
| 296 return; | |
| 297 denial_menu_runner_.reset(); | |
|
msw
2016/05/03 18:16:41
Why reset the runner here? Isn't it okay to re-use
ftang
2016/05/03 20:34:50
Done.
| |
| 298 } | |
| 299 | |
| 300 bool TranslateBubbleView::IsCommandIdChecked(int command_id) const { | |
| 301 return false; | |
| 302 } | |
| 303 | |
| 304 bool TranslateBubbleView::IsCommandIdEnabled(int command_id) const { | |
| 305 return true; | |
| 306 } | |
| 307 | |
| 308 bool TranslateBubbleView::GetAcceleratorForCommandId( | |
| 309 int command_id, | |
| 310 ui::Accelerator* accelerator) { | |
| 311 return false; | |
| 312 } | |
| 313 | |
| 314 void TranslateBubbleView::ExecuteCommand(int command_id, int event_flags) { | |
| 315 model_->DeclineTranslation(); | |
| 316 switch (command_id) { | |
| 317 case DenialMenuItem::NEVER_TRANSLATE_LANGUAGE: | |
| 318 model_->SetNeverTranslateLanguage(true); | |
| 319 ReportUiAction(translate::NEVER_TRANSLATE_LANGUAGE_MENU_CLICKED); | |
| 320 break; | |
| 321 case DenialMenuItem::NEVER_TRANSLATE_SITE: | |
| 322 model_->SetNeverTranslateSite(true); | |
| 323 ReportUiAction(translate::NEVER_TRANSLATE_SITE_MENU_CLICKED); | |
| 324 break; | |
| 325 default: | |
| 326 NOTREACHED(); | |
| 327 } | |
| 328 GetWidget()->Close(); | |
| 329 } | |
| 330 | |
| 331 void TranslateBubbleView::StyledLabelLinkClicked(views::StyledLabel* label, | |
| 332 const gfx::Range& range, | |
| 333 int event_flags) { | |
| 334 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED); | |
| 335 ReportUiAction(translate::ADVANCED_LINK_CLICKED); | |
| 336 } | |
| 337 | |
| 235 void TranslateBubbleView::WebContentsDestroyed() { | 338 void TranslateBubbleView::WebContentsDestroyed() { |
| 236 GetWidget()->CloseNow(); | 339 GetWidget()->CloseNow(); |
| 237 } | 340 } |
| 238 | 341 |
| 342 void TranslateBubbleView::OnWidgetClosing(views::Widget* widget) { | |
| 343 if (GetBubbleFrameView()->close_button_clicked()) { | |
| 344 model_->DeclineTranslation(); | |
| 345 ReportUiAction(translate::CLOSE_BUTTON_CLICKED); | |
| 346 } | |
| 347 } | |
| 348 | |
| 239 TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const { | 349 TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const { |
| 240 return model_->GetViewState(); | 350 return model_->GetViewState(); |
| 241 } | 351 } |
| 242 | 352 |
| 243 TranslateBubbleView::TranslateBubbleView( | 353 TranslateBubbleView::TranslateBubbleView( |
| 244 views::View* anchor_view, | 354 views::View* anchor_view, |
| 245 std::unique_ptr<TranslateBubbleModel> model, | 355 std::unique_ptr<TranslateBubbleModel> model, |
| 246 translate::TranslateErrors::Type error_type, | 356 translate::TranslateErrors::Type error_type, |
| 247 content::WebContents* web_contents) | 357 content::WebContents* web_contents) |
| 248 : LocationBarBubbleDelegateView(anchor_view, web_contents), | 358 : LocationBarBubbleDelegateView(anchor_view, web_contents), |
| 249 WebContentsObserver(web_contents), | 359 WebContentsObserver(web_contents), |
| 250 before_translate_view_(NULL), | 360 before_translate_view_(NULL), |
| 251 translating_view_(NULL), | 361 translating_view_(NULL), |
| 252 after_translate_view_(NULL), | 362 after_translate_view_(NULL), |
| 253 error_view_(NULL), | 363 error_view_(NULL), |
| 254 advanced_view_(NULL), | 364 advanced_view_(NULL), |
| 255 denial_combobox_(NULL), | 365 denial_combobox_(NULL), |
| 256 source_language_combobox_(NULL), | 366 source_language_combobox_(NULL), |
| 257 target_language_combobox_(NULL), | 367 target_language_combobox_(NULL), |
| 258 always_translate_checkbox_(NULL), | 368 always_translate_checkbox_(NULL), |
| 259 advanced_cancel_button_(NULL), | 369 advanced_cancel_button_(NULL), |
| 260 advanced_done_button_(NULL), | 370 advanced_done_button_(NULL), |
| 261 model_(std::move(model)), | 371 model_(std::move(model)), |
| 262 error_type_(error_type), | 372 error_type_(error_type), |
| 263 is_in_incognito_window_( | 373 is_in_incognito_window_( |
| 264 web_contents && web_contents->GetBrowserContext()->IsOffTheRecord()) { | 374 web_contents && web_contents->GetBrowserContext()->IsOffTheRecord()), |
| 375 use_2016_q2_ui_( | |
| 376 base::FeatureList::IsEnabled(translate::kTranslateUI2016Q2)) { | |
| 265 translate_bubble_view_ = this; | 377 translate_bubble_view_ = this; |
| 266 } | 378 } |
| 267 | 379 |
| 268 views::View* TranslateBubbleView::GetCurrentView() const { | 380 views::View* TranslateBubbleView::GetCurrentView() const { |
| 269 switch (model_->GetViewState()) { | 381 switch (model_->GetViewState()) { |
| 270 case TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE: | 382 case TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE: |
| 271 return before_translate_view_; | 383 return before_translate_view_; |
| 272 case TranslateBubbleModel::VIEW_STATE_TRANSLATING: | 384 case TranslateBubbleModel::VIEW_STATE_TRANSLATING: |
| 273 return translating_view_; | 385 return translating_view_; |
| 274 case TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE: | 386 case TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE: |
| 275 return after_translate_view_; | 387 return after_translate_view_; |
| 276 case TranslateBubbleModel::VIEW_STATE_ERROR: | 388 case TranslateBubbleModel::VIEW_STATE_ERROR: |
| 277 return error_view_; | 389 return error_view_; |
| 278 case TranslateBubbleModel::VIEW_STATE_ADVANCED: | 390 case TranslateBubbleModel::VIEW_STATE_ADVANCED: |
| 279 return advanced_view_; | 391 return advanced_view_; |
| 280 } | 392 } |
| 281 NOTREACHED(); | 393 NOTREACHED(); |
| 282 return NULL; | 394 return NULL; |
| 283 } | 395 } |
| 284 | 396 |
| 285 void TranslateBubbleView::HandleButtonPressed( | 397 void TranslateBubbleView::HandleButtonPressed( |
| 286 TranslateBubbleView::ButtonID sender_id) { | 398 TranslateBubbleView::ButtonID sender_id) { |
| 287 switch (sender_id) { | 399 switch (sender_id) { |
| 288 case BUTTON_ID_TRANSLATE: { | 400 case BUTTON_ID_TRANSLATE: { |
| 289 model_->Translate(); | 401 model_->Translate(); |
| 402 ReportUiAction(translate::TRANSLATE_BUTTON_CLICKED); | |
| 290 break; | 403 break; |
| 291 } | 404 } |
| 292 case BUTTON_ID_DONE: { | 405 case BUTTON_ID_DONE: { |
| 293 if (always_translate_checkbox_) | 406 if (always_translate_checkbox_) |
| 294 model_->SetAlwaysTranslate(always_translate_checkbox_->checked()); | 407 model_->SetAlwaysTranslate(always_translate_checkbox_->checked()); |
| 295 if (model_->IsPageTranslatedInCurrentLanguages()) { | 408 if (model_->IsPageTranslatedInCurrentLanguages()) { |
| 296 model_->GoBackFromAdvanced(); | 409 model_->GoBackFromAdvanced(); |
| 297 UpdateChildVisibilities(); | 410 UpdateChildVisibilities(); |
| 298 SizeToContents(); | 411 SizeToContents(); |
| 299 } else { | 412 } else { |
| 300 model_->Translate(); | 413 model_->Translate(); |
| 301 SwitchView(TranslateBubbleModel::VIEW_STATE_TRANSLATING); | 414 SwitchView(TranslateBubbleModel::VIEW_STATE_TRANSLATING); |
| 302 } | 415 } |
| 416 ReportUiAction(translate::DONE_BUTTON_CLICKED); | |
| 303 break; | 417 break; |
| 304 } | 418 } |
| 305 case BUTTON_ID_CANCEL: { | 419 case BUTTON_ID_CANCEL: { |
| 306 model_->GoBackFromAdvanced(); | 420 model_->GoBackFromAdvanced(); |
| 307 UpdateChildVisibilities(); | 421 UpdateChildVisibilities(); |
| 308 SizeToContents(); | 422 SizeToContents(); |
| 423 ReportUiAction(translate::CANCEL_BUTTON_CLICKED); | |
| 309 break; | 424 break; |
| 310 } | 425 } |
| 311 case BUTTON_ID_TRY_AGAIN: { | 426 case BUTTON_ID_TRY_AGAIN: { |
| 312 model_->Translate(); | 427 model_->Translate(); |
| 428 ReportUiAction(translate::TRY_AGAIN_BUTTON_CLICKED); | |
| 313 break; | 429 break; |
| 314 } | 430 } |
| 315 case BUTTON_ID_SHOW_ORIGINAL: { | 431 case BUTTON_ID_SHOW_ORIGINAL: { |
| 316 model_->RevertTranslation(); | 432 model_->RevertTranslation(); |
| 317 GetWidget()->Close(); | 433 GetWidget()->Close(); |
| 434 ReportUiAction(translate::SHOW_ORIGINAL_BUTTON_CLICKED); | |
| 318 break; | 435 break; |
| 319 } | 436 } |
| 320 case BUTTON_ID_ALWAYS_TRANSLATE: { | 437 case BUTTON_ID_ALWAYS_TRANSLATE: { |
| 321 // Do nothing. The state of the checkbox affects only when the 'Done' | 438 // Do nothing. The state of the checkbox affects only when the 'Done' |
| 322 // button is pressed. | 439 // button is pressed. |
| 440 ReportUiAction((always_translate_checkbox_->checked() | |
| 441 ? translate::ALWAYS_TRANSLATE_CHECKED | |
| 442 : translate::ALWAYS_TRANSLATE_UNCHECKED)); | |
| 323 break; | 443 break; |
| 324 } | 444 } |
| 325 } | 445 } |
| 326 } | 446 } |
| 327 | 447 |
| 328 void TranslateBubbleView::HandleLinkClicked( | 448 void TranslateBubbleView::HandleLinkClicked( |
| 329 TranslateBubbleView::LinkID sender_id) { | 449 TranslateBubbleView::LinkID sender_id) { |
| 330 switch (sender_id) { | 450 switch (sender_id) { |
| 331 case LINK_ID_ADVANCED: { | 451 case LINK_ID_ADVANCED: { |
| 332 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED); | 452 SwitchView(TranslateBubbleModel::VIEW_STATE_ADVANCED); |
| 453 ReportUiAction(translate::ADVANCED_LINK_CLICKED); | |
| 333 break; | 454 break; |
| 334 } | 455 } |
| 335 case LINK_ID_LANGUAGE_SETTINGS: { | 456 case LINK_ID_LANGUAGE_SETTINGS: { |
| 336 GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage); | 457 GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage); |
| 337 web_contents()->OpenURL(content::OpenURLParams( | 458 web_contents()->OpenURL( |
| 338 url, | 459 content::OpenURLParams(url, content::Referrer(), NEW_FOREGROUND_TAB, |
| 339 content::Referrer(), | 460 ui::PAGE_TRANSITION_LINK, false)); |
| 340 NEW_FOREGROUND_TAB, | 461 ReportUiAction(translate::SETTINGS_LINK_CLICKED); |
| 341 ui::PAGE_TRANSITION_LINK, | |
| 342 false)); | |
| 343 break; | 462 break; |
| 344 } | 463 } |
| 345 } | 464 } |
| 346 } | 465 } |
| 347 | 466 |
| 348 void TranslateBubbleView::HandleComboboxPerformAction( | 467 void TranslateBubbleView::HandleComboboxPerformAction( |
| 349 TranslateBubbleView::ComboboxID sender_id) { | 468 TranslateBubbleView::ComboboxID sender_id) { |
| 350 switch (sender_id) { | 469 switch (sender_id) { |
| 351 case COMBOBOX_ID_DENIAL: { | 470 case COMBOBOX_ID_DENIAL: { |
| 352 model_->DeclineTranslation(); | |
| 353 DenialComboboxIndex index = | 471 DenialComboboxIndex index = |
| 354 static_cast<DenialComboboxIndex>(denial_combobox_->selected_index()); | 472 static_cast<DenialComboboxIndex>(denial_combobox_->selected_index()); |
| 473 model_->DeclineTranslation(); | |
| 355 switch (index) { | 474 switch (index) { |
| 356 case DenialComboboxIndex::DONT_TRANSLATE: | 475 case DenialComboboxIndex::DONT_TRANSLATE: |
| 476 ReportUiAction(translate::NOPE_MENU_CLICKED); | |
| 357 break; | 477 break; |
| 358 case DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE: | 478 case DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE: |
| 359 model_->SetNeverTranslateLanguage(true); | 479 model_->SetNeverTranslateLanguage(true); |
| 480 ReportUiAction(translate::NEVER_TRANSLATE_LANGUAGE_MENU_CLICKED); | |
| 360 break; | 481 break; |
| 361 case DenialComboboxIndex::NEVER_TRANSLATE_SITE: | 482 case DenialComboboxIndex::NEVER_TRANSLATE_SITE: |
| 362 model_->SetNeverTranslateSite(true); | 483 model_->SetNeverTranslateSite(true); |
| 484 ReportUiAction(translate::NEVER_TRANSLATE_SITE_MENU_CLICKED); | |
| 363 break; | 485 break; |
| 364 default: | 486 default: |
| 365 NOTREACHED(); | 487 NOTREACHED(); |
| 366 break; | 488 break; |
| 367 } | 489 } |
| 368 GetWidget()->Close(); | 490 GetWidget()->Close(); |
| 369 break; | 491 break; |
| 370 } | 492 } |
| 371 case COMBOBOX_ID_SOURCE_LANGUAGE: { | 493 case COMBOBOX_ID_SOURCE_LANGUAGE: { |
| 372 if (model_->GetOriginalLanguageIndex() == | 494 if (model_->GetOriginalLanguageIndex() == |
| 373 source_language_combobox_->selected_index()) { | 495 source_language_combobox_->selected_index()) { |
| 374 break; | 496 break; |
| 375 } | 497 } |
| 376 model_->UpdateOriginalLanguageIndex( | 498 model_->UpdateOriginalLanguageIndex( |
| 377 source_language_combobox_->selected_index()); | 499 source_language_combobox_->selected_index()); |
| 378 UpdateAdvancedView(); | 500 UpdateAdvancedView(); |
| 501 ReportUiAction(translate::SOURCE_LANGUAGE_MENU_CLICKED); | |
| 379 break; | 502 break; |
| 380 } | 503 } |
| 381 case COMBOBOX_ID_TARGET_LANGUAGE: { | 504 case COMBOBOX_ID_TARGET_LANGUAGE: { |
| 382 if (model_->GetTargetLanguageIndex() == | 505 if (model_->GetTargetLanguageIndex() == |
| 383 target_language_combobox_->selected_index()) { | 506 target_language_combobox_->selected_index()) { |
| 384 break; | 507 break; |
| 385 } | 508 } |
| 386 model_->UpdateTargetLanguageIndex( | 509 model_->UpdateTargetLanguageIndex( |
| 387 target_language_combobox_->selected_index()); | 510 target_language_combobox_->selected_index()); |
| 388 UpdateAdvancedView(); | 511 UpdateAdvancedView(); |
| 512 ReportUiAction(translate::TARGET_LANGUAGE_MENU_CLICKED); | |
| 389 break; | 513 break; |
| 390 } | 514 } |
| 391 } | 515 } |
| 392 } | 516 } |
| 393 | 517 |
| 394 void TranslateBubbleView::UpdateChildVisibilities() { | 518 void TranslateBubbleView::UpdateChildVisibilities() { |
| 395 for (int i = 0; i < child_count(); i++) { | 519 for (int i = 0; i < child_count(); i++) { |
| 396 views::View* view = child_at(i); | 520 views::View* view = child_at(i); |
| 397 view->SetVisible(view == GetCurrentView()); | 521 view->SetVisible(view == GetCurrentView()); |
| 398 } | 522 } |
| 399 } | 523 } |
| 400 | 524 |
| 401 views::View* TranslateBubbleView::CreateViewBeforeTranslate() { | 525 views::View* TranslateBubbleView::CreateViewBeforeTranslate() { |
| 402 views::Label* message_label = new views::Label( | 526 const int kQuestionWidth = 200; |
| 403 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE)); | |
| 404 | |
| 405 base::string16 original_language_name = | 527 base::string16 original_language_name = |
| 406 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); | 528 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); |
| 407 | 529 |
| 408 std::vector<base::string16> items( | |
| 409 static_cast<size_t>(DenialComboboxIndex::MENU_SIZE)); | |
| 410 items[static_cast<size_t>(DenialComboboxIndex::DONT_TRANSLATE)] = | |
| 411 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_DENY); | |
| 412 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE)] = | |
| 413 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG, | |
| 414 original_language_name); | |
| 415 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_SITE)] = | |
| 416 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE); | |
| 417 | |
| 418 denial_combobox_model_.reset(new ui::SimpleComboboxModel(items)); | |
| 419 denial_combobox_ = new views::Combobox(denial_combobox_model_.get()); | |
| 420 denial_combobox_->set_id(COMBOBOX_ID_DENIAL); | |
| 421 denial_combobox_->set_listener(this); | |
| 422 denial_combobox_->SetStyle(views::Combobox::STYLE_ACTION); | |
| 423 | |
| 424 views::View* view = new views::View(); | 530 views::View* view = new views::View(); |
| 425 views::GridLayout* layout = new views::GridLayout(view); | 531 views::GridLayout* layout = new views::GridLayout(view); |
| 426 view->SetLayoutManager(layout); | 532 view->SetLayoutManager(layout); |
| 427 | 533 |
| 428 using views::GridLayout; | 534 using views::GridLayout; |
| 429 | 535 |
| 430 enum { | 536 enum { |
| 431 COLUMN_SET_ID_MESSAGE, | 537 COLUMN_SET_ID_MESSAGE, |
| 432 COLUMN_SET_ID_CONTENT, | 538 COLUMN_SET_ID_CONTENT, |
| 433 }; | 539 }; |
| 434 | 540 |
| 435 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); | 541 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); |
| 436 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 542 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 437 0, GridLayout::USE_PREF, 0, 0); | 543 GridLayout::USE_PREF, 0, 0); |
| 438 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); | 544 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); |
| 439 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 545 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 440 0, GridLayout::USE_PREF, 0, 0); | 546 GridLayout::USE_PREF, 0, 0); |
| 441 cs->AddPaddingColumn(1, 0); | 547 cs->AddPaddingColumn(1, 0); |
| 442 | 548 |
| 443 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); | 549 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); |
| 444 cs->AddPaddingColumn(1, 0); | 550 cs->AddPaddingColumn(1, 0); |
| 445 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 551 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 446 0, GridLayout::USE_PREF, 0, 0); | 552 GridLayout::USE_PREF, 0, 0); |
| 447 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); | 553 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); |
| 448 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 554 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 449 0, GridLayout::USE_PREF, 0, 0); | 555 GridLayout::USE_PREF, 0, 0); |
| 450 | 556 |
| 451 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); | 557 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); |
| 452 layout->AddView(message_label); | 558 if (use_2016_q2_ui_) { |
| 453 layout->AddView(CreateLink(this, | 559 AddIconToLayout(layout); |
| 454 IDS_TRANSLATE_BUBBLE_ADVANCED, | |
| 455 LINK_ID_ADVANCED)); | |
| 456 | 560 |
| 561 base::string16 target_language_name = | |
| 562 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); | |
| 563 std::vector<size_t> offsets; | |
| 564 auto styled_label = new views::StyledLabel( | |
| 565 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE_NEW, | |
| 566 original_language_name, target_language_name, | |
| 567 &offsets), | |
| 568 this); | |
| 569 auto style_info = views::StyledLabel::RangeStyleInfo::CreateForLink(); | |
| 570 styled_label->AddStyleRange( | |
| 571 gfx::Range(static_cast<uint32_t>(offsets[0]), | |
| 572 static_cast<uint32_t>(offsets[0] + | |
| 573 original_language_name.length())), | |
| 574 style_info); | |
| 575 styled_label->AddStyleRange( | |
| 576 gfx::Range( | |
| 577 static_cast<uint32_t>(offsets[1]), | |
| 578 static_cast<uint32_t>(offsets[1] + target_language_name.length())), | |
| 579 style_info); | |
| 580 styled_label->SizeToFit(kQuestionWidth); | |
| 581 layout->AddView(styled_label); | |
| 582 } else { | |
| 583 layout->AddView(new views::Label( | |
| 584 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE))); | |
| 585 layout->AddView( | |
| 586 CreateLink(this, IDS_TRANSLATE_BUBBLE_ADVANCED, LINK_ID_ADVANCED)); | |
| 587 } | |
| 588 | |
| 589 // In an incognito window, the "Always translate" checkbox shouldn't be shown. | |
| 590 if (use_2016_q2_ui_ && !is_in_incognito_window_) { | |
| 591 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); | |
| 592 layout->SkipColumns(1); | |
| 593 always_translate_checkbox_ = new views::Checkbox( | |
| 594 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS)); | |
| 595 always_translate_checkbox_->SetChecked( | |
| 596 model_->ShouldAlwaysTranslateBeCheckedByDefault()); | |
| 597 always_translate_checkbox_->set_id(BUTTON_ID_ALWAYS_TRANSLATE); | |
| 598 always_translate_checkbox_->set_listener(this); | |
| 599 layout->AddView(always_translate_checkbox_); | |
| 600 } | |
| 457 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); | 601 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| 458 | 602 |
| 459 layout->StartRow(0, COLUMN_SET_ID_CONTENT); | 603 layout->StartRow(0, COLUMN_SET_ID_CONTENT); |
| 460 views::LabelButton* accept_button = CreateLabelButton( | 604 views::LabelButton* accept_button = |
| 461 this, | 605 use_2016_q2_ui_ |
| 462 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT), | 606 ? CreateBlueButton( |
| 463 BUTTON_ID_TRANSLATE); | 607 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT), |
| 608 BUTTON_ID_TRANSLATE) | |
| 609 : CreateLabelButton( | |
| 610 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT), | |
| 611 BUTTON_ID_TRANSLATE); | |
| 464 layout->AddView(accept_button); | 612 layout->AddView(accept_button); |
| 465 accept_button->SetIsDefault(true); | 613 accept_button->SetIsDefault(true); |
| 466 layout->AddView(denial_combobox_); | 614 if (use_2016_q2_ui_) { |
| 615 auto menu_button = new views::MenuButton( | |
| 616 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_OPTIONS_MENU_BUTTON), | |
| 617 this, true); | |
| 618 menu_button->SetStyle(views::Button::STYLE_BUTTON); | |
| 619 layout->AddView(menu_button); | |
| 620 } else { | |
| 621 std::vector<base::string16> items( | |
| 622 static_cast<size_t>(DenialComboboxIndex::MENU_SIZE)); | |
| 623 items[static_cast<size_t>(DenialComboboxIndex::DONT_TRANSLATE)] = | |
| 624 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_DENY); | |
| 625 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_LANGUAGE)] = | |
| 626 l10n_util::GetStringFUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG, | |
| 627 original_language_name); | |
| 628 items[static_cast<size_t>(DenialComboboxIndex::NEVER_TRANSLATE_SITE)] = | |
| 629 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE); | |
| 630 denial_combobox_model_.reset(new ui::SimpleComboboxModel(items)); | |
| 631 denial_combobox_ = new views::Combobox(denial_combobox_model_.get()); | |
| 632 denial_combobox_->set_id(COMBOBOX_ID_DENIAL); | |
| 633 denial_combobox_->set_listener(this); | |
| 634 denial_combobox_->SetStyle(views::Combobox::STYLE_ACTION); | |
| 635 layout->AddView(denial_combobox_); | |
| 636 } | |
| 467 | 637 |
| 468 return view; | 638 return view; |
| 469 } | 639 } |
| 470 | 640 |
| 471 views::View* TranslateBubbleView::CreateViewTranslating() { | 641 views::View* TranslateBubbleView::CreateViewTranslating() { |
| 472 base::string16 target_language_name = | 642 base::string16 target_language_name = |
| 473 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); | 643 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); |
| 474 views::Label* label = new views::Label( | 644 views::Label* label = new views::Label( |
| 475 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATING)); | 645 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATING)); |
| 476 | 646 |
| 477 views::View* view = new views::View(); | 647 views::View* view = new views::View(); |
| 478 views::GridLayout* layout = new views::GridLayout(view); | 648 views::GridLayout* layout = new views::GridLayout(view); |
| 479 view->SetLayoutManager(layout); | 649 view->SetLayoutManager(layout); |
| 480 | 650 |
| 481 using views::GridLayout; | 651 using views::GridLayout; |
| 482 | 652 |
| 483 enum { | 653 enum { |
| 484 COLUMN_SET_ID_MESSAGE, | 654 COLUMN_SET_ID_MESSAGE, |
| 485 COLUMN_SET_ID_CONTENT, | 655 COLUMN_SET_ID_CONTENT, |
| 486 }; | 656 }; |
| 487 | 657 |
| 488 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); | 658 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); |
| 489 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 659 if (use_2016_q2_ui_) { |
| 490 0, views::GridLayout::USE_PREF, 0, 0); | 660 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 661 views::GridLayout::USE_PREF, 0, 0); | |
| 662 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); | |
| 663 } | |
| 664 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, | |
| 665 GridLayout::USE_PREF, 0, 0); | |
| 491 cs->AddPaddingColumn(1, 0); | 666 cs->AddPaddingColumn(1, 0); |
| 492 | 667 |
| 493 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); | 668 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); |
| 494 cs->AddPaddingColumn(1, 0); | 669 cs->AddPaddingColumn(1, 0); |
| 495 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 670 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 496 0, GridLayout::USE_PREF, 0, 0); | 671 GridLayout::USE_PREF, 0, 0); |
| 497 | 672 |
| 498 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); | 673 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); |
| 674 if (use_2016_q2_ui_) | |
| 675 AddIconToLayout(layout); | |
| 499 layout->AddView(label); | 676 layout->AddView(label); |
| 500 | 677 |
| 501 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); | 678 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| 502 | 679 |
| 503 layout->StartRow(0, COLUMN_SET_ID_CONTENT); | 680 layout->StartRow(0, COLUMN_SET_ID_CONTENT); |
| 504 views::LabelButton* revert_button = CreateLabelButton( | 681 views::LabelButton* revert_button = CreateLabelButton( |
| 505 this, | 682 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT), |
| 506 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT), | |
| 507 BUTTON_ID_SHOW_ORIGINAL); | 683 BUTTON_ID_SHOW_ORIGINAL); |
| 508 revert_button->SetEnabled(false); | 684 revert_button->SetEnabled(false); |
| 509 layout->AddView(revert_button); | 685 layout->AddView(revert_button); |
| 510 | 686 |
| 511 return view; | 687 return view; |
| 512 } | 688 } |
| 513 | 689 |
| 514 views::View* TranslateBubbleView::CreateViewAfterTranslate() { | 690 views::View* TranslateBubbleView::CreateViewAfterTranslate() { |
| 515 views::Label* label = new views::Label( | 691 views::Label* label = new views::Label( |
| 516 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATED)); | 692 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRANSLATED)); |
| 517 | 693 |
| 518 views::View* view = new views::View(); | 694 views::View* view = new views::View(); |
| 519 views::GridLayout* layout = new views::GridLayout(view); | 695 views::GridLayout* layout = new views::GridLayout(view); |
| 520 view->SetLayoutManager(layout); | 696 view->SetLayoutManager(layout); |
| 521 | 697 |
| 522 using views::GridLayout; | 698 using views::GridLayout; |
| 523 | 699 |
| 524 enum { | 700 enum { |
| 525 COLUMN_SET_ID_MESSAGE, | 701 COLUMN_SET_ID_MESSAGE, |
| 526 COLUMN_SET_ID_CONTENT, | 702 COLUMN_SET_ID_CONTENT, |
| 527 }; | 703 }; |
| 528 | 704 |
| 529 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); | 705 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); |
| 530 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 706 if (use_2016_q2_ui_) { |
| 531 0, views::GridLayout::USE_PREF, 0, 0); | 707 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 708 GridLayout::USE_PREF, 0, 0); | |
| 709 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); | |
| 710 } | |
| 711 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, | |
| 712 GridLayout::USE_PREF, 0, 0); | |
| 532 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); | 713 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); |
| 533 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 714 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 534 0, views::GridLayout::USE_PREF, 0, 0); | 715 GridLayout::USE_PREF, 0, 0); |
| 535 cs->AddPaddingColumn(1, 0); | 716 cs->AddPaddingColumn(1, 0); |
| 536 | 717 |
| 537 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); | 718 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); |
| 538 cs->AddPaddingColumn(1, 0); | 719 cs->AddPaddingColumn(1, 0); |
| 539 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 720 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 540 0, GridLayout::USE_PREF, 0, 0); | 721 GridLayout::USE_PREF, 0, 0); |
| 541 | 722 |
| 542 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); | 723 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); |
| 724 if (use_2016_q2_ui_) | |
| 725 AddIconToLayout(layout); | |
| 543 layout->AddView(label); | 726 layout->AddView(label); |
| 544 layout->AddView(CreateLink(this, | 727 layout->AddView( |
| 545 IDS_TRANSLATE_BUBBLE_ADVANCED, | 728 CreateLink(this, IDS_TRANSLATE_BUBBLE_ADVANCED, LINK_ID_ADVANCED)); |
| 546 LINK_ID_ADVANCED)); | |
| 547 | 729 |
| 548 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); | 730 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| 549 | 731 |
| 550 layout->StartRow(0, COLUMN_SET_ID_CONTENT); | 732 layout->StartRow(0, COLUMN_SET_ID_CONTENT); |
| 551 layout->AddView(CreateLabelButton( | 733 layout->AddView(CreateLabelButton( |
| 552 this, | 734 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT), |
| 553 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_REVERT), | |
| 554 BUTTON_ID_SHOW_ORIGINAL)); | 735 BUTTON_ID_SHOW_ORIGINAL)); |
| 555 | 736 |
| 556 return view; | 737 return view; |
| 557 } | 738 } |
| 558 | 739 |
| 559 views::View* TranslateBubbleView::CreateViewError() { | 740 views::View* TranslateBubbleView::CreateViewError() { |
| 560 views::Label* label = new views::Label( | 741 views::Label* label = new views::Label( |
| 561 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE)); | 742 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE)); |
| 562 | 743 |
| 563 views::View* view = new views::View(); | 744 views::View* view = new views::View(); |
| 564 views::GridLayout* layout = new views::GridLayout(view); | 745 views::GridLayout* layout = new views::GridLayout(view); |
| 565 view->SetLayoutManager(layout); | 746 view->SetLayoutManager(layout); |
| 566 | 747 |
| 567 using views::GridLayout; | 748 using views::GridLayout; |
| 568 | 749 |
| 569 enum { | 750 enum { |
| 570 COLUMN_SET_ID_MESSAGE, | 751 COLUMN_SET_ID_MESSAGE, |
| 571 COLUMN_SET_ID_CONTENT, | 752 COLUMN_SET_ID_CONTENT, |
| 572 }; | 753 }; |
| 573 | 754 |
| 574 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); | 755 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_MESSAGE); |
| 575 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 756 if (use_2016_q2_ui_) { |
| 576 0, GridLayout::USE_PREF, 0, 0); | 757 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 758 GridLayout::USE_PREF, 0, 0); | |
| 759 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); | |
| 760 } | |
| 761 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, | |
| 762 GridLayout::USE_PREF, 0, 0); | |
| 577 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); | 763 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); |
| 578 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 764 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 579 0, GridLayout::USE_PREF, 0, 0); | 765 GridLayout::USE_PREF, 0, 0); |
| 580 cs->AddPaddingColumn(1, 0); | 766 cs->AddPaddingColumn(1, 0); |
| 581 | 767 |
| 582 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); | 768 cs = layout->AddColumnSet(COLUMN_SET_ID_CONTENT); |
| 583 cs->AddPaddingColumn(1, 0); | 769 cs->AddPaddingColumn(1, 0); |
| 584 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 770 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 585 0, GridLayout::USE_PREF, 0, 0); | 771 GridLayout::USE_PREF, 0, 0); |
| 586 | 772 |
| 587 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); | 773 layout->StartRow(0, COLUMN_SET_ID_MESSAGE); |
| 774 if (use_2016_q2_ui_) | |
| 775 AddIconToLayout(layout); | |
| 588 layout->AddView(label); | 776 layout->AddView(label); |
| 589 layout->AddView(CreateLink(this, | 777 layout->AddView( |
| 590 IDS_TRANSLATE_BUBBLE_ADVANCED, | 778 CreateLink(this, IDS_TRANSLATE_BUBBLE_ADVANCED, LINK_ID_ADVANCED)); |
| 591 LINK_ID_ADVANCED)); | |
| 592 | 779 |
| 593 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); | 780 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| 594 | 781 |
| 595 layout->StartRow(0, COLUMN_SET_ID_CONTENT); | 782 layout->StartRow(0, COLUMN_SET_ID_CONTENT); |
| 596 layout->AddView(CreateLabelButton( | 783 layout->AddView(CreateLabelButton( |
| 597 this, | 784 this, l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRY_AGAIN), |
| 598 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_TRY_AGAIN), | |
| 599 BUTTON_ID_TRY_AGAIN)); | 785 BUTTON_ID_TRY_AGAIN)); |
| 600 | 786 |
| 601 return view; | 787 return view; |
| 602 } | 788 } |
| 603 | 789 |
| 604 // TODO(hajimehoshi): Revice this later to show a specific message for each | 790 // TODO(hajimehoshi): Revice this later to show a specific message for each |
| 605 // error. (crbug/307350) | 791 // error. (crbug/307350) |
| 606 views::View* TranslateBubbleView::CreateViewAdvanced() { | 792 views::View* TranslateBubbleView::CreateViewAdvanced() { |
| 607 views::Label* source_language_label = new views::Label( | 793 views::Label* source_language_label = new views::Label( |
| 608 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_PAGE_LANGUAGE)); | 794 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_PAGE_LANGUAGE)); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 640 view->SetLayoutManager(layout); | 826 view->SetLayoutManager(layout); |
| 641 | 827 |
| 642 using views::GridLayout; | 828 using views::GridLayout; |
| 643 | 829 |
| 644 enum { | 830 enum { |
| 645 COLUMN_SET_ID_LANGUAGES, | 831 COLUMN_SET_ID_LANGUAGES, |
| 646 COLUMN_SET_ID_BUTTONS, | 832 COLUMN_SET_ID_BUTTONS, |
| 647 }; | 833 }; |
| 648 | 834 |
| 649 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_LANGUAGES); | 835 views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_ID_LANGUAGES); |
| 650 cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, | 836 cs->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0, |
| 651 0, GridLayout::USE_PREF, 0, 0); | 837 GridLayout::USE_PREF, 0, 0); |
| 652 cs->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); | 838 cs->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
| 653 cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, | 839 cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, GridLayout::USE_PREF, |
| 654 0, GridLayout::USE_PREF, 0, 0); | 840 0, 0); |
| 655 cs->AddPaddingColumn(1, 0); | 841 cs->AddPaddingColumn(1, 0); |
| 656 | 842 |
| 657 cs = layout->AddColumnSet(COLUMN_SET_ID_BUTTONS); | 843 cs = layout->AddColumnSet(COLUMN_SET_ID_BUTTONS); |
| 658 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 844 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 659 0, GridLayout::USE_PREF, 0, 0); | 845 GridLayout::USE_PREF, 0, 0); |
| 660 cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing); | 846 cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing); |
| 661 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 847 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 662 0, GridLayout::USE_PREF, 0, 0); | 848 GridLayout::USE_PREF, 0, 0); |
| 663 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); | 849 cs->AddPaddingColumn(0, views::kRelatedButtonHSpacing); |
| 664 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, | 850 cs->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 0, |
| 665 0, GridLayout::USE_PREF, 0, 0); | 851 GridLayout::USE_PREF, 0, 0); |
| 666 | 852 |
| 667 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); | 853 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); |
| 668 layout->AddView(source_language_label); | 854 layout->AddView(source_language_label); |
| 669 layout->AddView(source_language_combobox_); | 855 layout->AddView(source_language_combobox_); |
| 670 | 856 |
| 671 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | 857 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
| 672 | 858 |
| 673 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); | 859 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); |
| 674 layout->AddView(target_language_label); | 860 layout->AddView(target_language_label); |
| 675 layout->AddView(target_language_combobox_); | 861 layout->AddView(target_language_combobox_); |
| 676 | 862 |
| 677 if (!is_in_incognito_window_) { | 863 if (!is_in_incognito_window_) { |
| 678 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); | 864 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
| 679 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); | 865 layout->StartRow(0, COLUMN_SET_ID_LANGUAGES); |
| 680 layout->SkipColumns(1); | 866 layout->SkipColumns(1); |
| 681 layout->AddView(always_translate_checkbox_); | 867 layout->AddView(always_translate_checkbox_); |
| 682 } | 868 } |
| 683 | 869 |
| 684 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); | 870 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| 685 | 871 |
| 686 layout->StartRow(0, COLUMN_SET_ID_BUTTONS); | 872 layout->StartRow(0, COLUMN_SET_ID_BUTTONS); |
| 687 layout->AddView(CreateLink(this, | 873 layout->AddView(CreateLink(this, IDS_TRANSLATE_BUBBLE_LANGUAGE_SETTINGS, |
| 688 IDS_TRANSLATE_BUBBLE_LANGUAGE_SETTINGS, | |
| 689 LINK_ID_LANGUAGE_SETTINGS)); | 874 LINK_ID_LANGUAGE_SETTINGS)); |
| 690 advanced_done_button_ = CreateLabelButton( | 875 advanced_done_button_ = |
| 691 this, l10n_util::GetStringUTF16(IDS_DONE), BUTTON_ID_DONE); | 876 use_2016_q2_ui_ |
| 877 ? CreateBlueButton(this, l10n_util::GetStringUTF16(IDS_DONE), | |
| 878 BUTTON_ID_DONE) | |
| 879 : CreateLabelButton(this, l10n_util::GetStringUTF16(IDS_DONE), | |
| 880 BUTTON_ID_DONE); | |
| 692 advanced_done_button_->SetIsDefault(true); | 881 advanced_done_button_->SetIsDefault(true); |
| 693 advanced_cancel_button_ = CreateLabelButton( | 882 advanced_cancel_button_ = CreateLabelButton( |
| 694 this, l10n_util::GetStringUTF16(IDS_CANCEL), BUTTON_ID_CANCEL); | 883 this, l10n_util::GetStringUTF16(IDS_CANCEL), BUTTON_ID_CANCEL); |
| 695 layout->AddView(advanced_done_button_); | 884 layout->AddView(advanced_done_button_); |
| 696 layout->AddView(advanced_cancel_button_); | 885 layout->AddView(advanced_cancel_button_); |
| 697 | 886 |
| 698 UpdateAdvancedView(); | 887 UpdateAdvancedView(); |
| 699 | 888 |
| 700 return view; | 889 return view; |
| 701 } | 890 } |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 727 base::string16 source_language_name = | 916 base::string16 source_language_name = |
| 728 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); | 917 model_->GetLanguageNameAt(model_->GetOriginalLanguageIndex()); |
| 729 base::string16 target_language_name = | 918 base::string16 target_language_name = |
| 730 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); | 919 model_->GetLanguageNameAt(model_->GetTargetLanguageIndex()); |
| 731 | 920 |
| 732 // "Always translate" checkbox doesn't exist in an incognito window. | 921 // "Always translate" checkbox doesn't exist in an incognito window. |
| 733 if (always_translate_checkbox_) { | 922 if (always_translate_checkbox_) { |
| 734 always_translate_checkbox_->SetText( | 923 always_translate_checkbox_->SetText( |
| 735 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS)); | 924 l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ALWAYS)); |
| 736 always_translate_checkbox_->SetChecked( | 925 always_translate_checkbox_->SetChecked( |
| 737 model_->ShouldAlwaysTranslate()); | 926 use_2016_q2_ui_ ? model_->ShouldAlwaysTranslateBeCheckedByDefault() |
| 927 : model_->ShouldAlwaysTranslate()); | |
| 738 } | 928 } |
| 739 | 929 |
| 740 base::string16 label; | 930 base::string16 label; |
| 741 if (model_->IsPageTranslatedInCurrentLanguages()) | 931 if (model_->IsPageTranslatedInCurrentLanguages()) |
| 742 label = l10n_util::GetStringUTF16(IDS_DONE); | 932 label = l10n_util::GetStringUTF16(IDS_DONE); |
| 743 else | 933 else |
| 744 label = l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT); | 934 label = l10n_util::GetStringUTF16(IDS_TRANSLATE_BUBBLE_ACCEPT); |
| 745 advanced_done_button_->SetText(label); | 935 advanced_done_button_->SetText(label); |
| 746 advanced_done_button_->SizeToPreferredSize(); | 936 advanced_done_button_->SizeToPreferredSize(); |
| 747 if (advanced_view_) | 937 if (advanced_view_) |
| 748 advanced_view_->Layout(); | 938 advanced_view_->Layout(); |
| 749 } | 939 } |
| 940 | |
| 941 void TranslateBubbleView::ReportUiAction(int action) { | |
| 942 UMA_HISTOGRAM_ENUMERATION(kTranslateBubbleUIEvent, action, | |
| 943 translate::TRANSLATE_BUBBLE_UI_EVENT_MAX); | |
| 944 } | |
| OLD | NEW |