profile_signin_confirmation_dialog_views.cc revision 868fa2fe829687343ffae624259930155e16dbd8
144d362409d5469aed47d19e7908d19bd194493aThomas Graf// Copyright 2013 The Chromium Authors. All rights reserved.
244d362409d5469aed47d19e7908d19bd194493aThomas Graf// Use of this source code is governed by a BSD-style license that can be
344d362409d5469aed47d19e7908d19bd194493aThomas Graf// found in the LICENSE file.
444d362409d5469aed47d19e7908d19bd194493aThomas Graf
544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h"
644d362409d5469aed47d19e7908d19bd194493aThomas Graf
744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "base/strings/utf_string_conversions.h"
844d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "chrome/browser/ui/browser.h"
9535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf#include "chrome/browser/ui/browser_dialogs.h"
1044d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "chrome/browser/ui/browser_navigator.h"
1144d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "chrome/browser/ui/browser_window.h"
1244d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "chrome/browser/ui/host_desktop.h"
1344d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "chrome/browser/ui/views/constrained_window_views.h"
1444d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "components/web_modal/web_contents_modal_dialog_manager.h"
1544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "components/web_modal/web_contents_modal_dialog_manager_delegate.h"
1644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "content/public/browser/web_contents.h"
1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "content/public/browser/web_contents_view.h"
1844d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "google_apis/gaia/gaia_auth_util.h"
1944d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "grit/chromium_strings.h"
2044d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "grit/generated_resources.h"
2144d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "third_party/skia/include/core/SkColor.h"
2244d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/base/l10n/l10n_util.h"
2344d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/base/range/range.h"
2444d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/gfx/font.h"
252bdee95a765457fe4206b89d51974ae56e75c588Thomas Graf#include "ui/gfx/native_widget_types.h"
2644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/views/background.h"
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/views/controls/label.h"
2844d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/views/controls/link.h"
2944d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/views/controls/styled_label.h"
301155370f520cb64657e25153255cf7dc1424317fThomas Graf#include "ui/views/layout/box_layout.h"
3144d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/views/layout/grid_layout.h"
3244d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/views/layout/layout_constants.h"
3344d362409d5469aed47d19e7908d19bd194493aThomas Graf#include "ui/views/widget/widget.h"
3444d362409d5469aed47d19e7908d19bd194493aThomas Graf
3544d362409d5469aed47d19e7908d19bd194493aThomas Grafnamespace {
3644d362409d5469aed47d19e7908d19bd194493aThomas Graf
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf// Wrap a view in a fixed-width container.
3844d362409d5469aed47d19e7908d19bd194493aThomas Grafviews::View* MakeFixedWidth(views::View* view, int width) {
3944d362409d5469aed47d19e7908d19bd194493aThomas Graf  views::View* container = new views::View;
4044d362409d5469aed47d19e7908d19bd194493aThomas Graf  views::GridLayout* layout = views::GridLayout::CreatePanel(container);
4144d362409d5469aed47d19e7908d19bd194493aThomas Graf  container->SetLayoutManager(layout);
4244d362409d5469aed47d19e7908d19bd194493aThomas Graf  layout->AddColumnSet(0)->AddColumn(
431155370f520cb64657e25153255cf7dc1424317fThomas Graf      views::GridLayout::LEADING, views::GridLayout::CENTER, 0,
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf      views::GridLayout::FIXED, width, false);
4544d362409d5469aed47d19e7908d19bd194493aThomas Graf  layout->StartRow(0, 0);
4644d362409d5469aed47d19e7908d19bd194493aThomas Graf  layout->AddView(view, 1, 1, views::GridLayout::FILL, views::GridLayout::FILL);
4744d362409d5469aed47d19e7908d19bd194493aThomas Graf  return container;
481155370f520cb64657e25153255cf7dc1424317fThomas Graf}
4944d362409d5469aed47d19e7908d19bd194493aThomas Graf
5044d362409d5469aed47d19e7908d19bd194493aThomas Graf}  // namespace
5144d362409d5469aed47d19e7908d19bd194493aThomas Graf
5244d362409d5469aed47d19e7908d19bd194493aThomas Grafnamespace chrome {
5344d362409d5469aed47d19e7908d19bd194493aThomas Graf// Declared in browser_dialogs.h
5444d362409d5469aed47d19e7908d19bd194493aThomas Grafvoid ShowProfileSigninConfirmationDialog(
551155370f520cb64657e25153255cf7dc1424317fThomas Graf    Browser* browser,
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf    content::WebContents* web_contents,
5744d362409d5469aed47d19e7908d19bd194493aThomas Graf    Profile* profile,
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf    const std::string& username,
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf    ui::ProfileSigninConfirmationDelegate* delegate) {
6044d362409d5469aed47d19e7908d19bd194493aThomas Graf  ProfileSigninConfirmationDialogViews::ShowDialog(browser,
611155370f520cb64657e25153255cf7dc1424317fThomas Graf                                                   profile,
6244d362409d5469aed47d19e7908d19bd194493aThomas Graf                                                   username,
631155370f520cb64657e25153255cf7dc1424317fThomas Graf                                                   delegate);
641155370f520cb64657e25153255cf7dc1424317fThomas Graf}
651155370f520cb64657e25153255cf7dc1424317fThomas Graf}  // namespace chrome
661155370f520cb64657e25153255cf7dc1424317fThomas Graf
671155370f520cb64657e25153255cf7dc1424317fThomas GrafProfileSigninConfirmationDialogViews::ProfileSigninConfirmationDialogViews(
681155370f520cb64657e25153255cf7dc1424317fThomas Graf    Browser* browser,
691155370f520cb64657e25153255cf7dc1424317fThomas Graf    Profile* profile,
701155370f520cb64657e25153255cf7dc1424317fThomas Graf    const std::string& username,
7144d362409d5469aed47d19e7908d19bd194493aThomas Graf    ui::ProfileSigninConfirmationDelegate* delegate)
7244d362409d5469aed47d19e7908d19bd194493aThomas Graf  : browser_(browser),
7344d362409d5469aed47d19e7908d19bd194493aThomas Graf    profile_(profile),
7444d362409d5469aed47d19e7908d19bd194493aThomas Graf    username_(username),
7544d362409d5469aed47d19e7908d19bd194493aThomas Graf    delegate_(delegate),
7644d362409d5469aed47d19e7908d19bd194493aThomas Graf    prompt_for_new_profile_(true),
7744d362409d5469aed47d19e7908d19bd194493aThomas Graf    link_(NULL) {
7844d362409d5469aed47d19e7908d19bd194493aThomas Graf}
7944d362409d5469aed47d19e7908d19bd194493aThomas Graf
8044d362409d5469aed47d19e7908d19bd194493aThomas GrafProfileSigninConfirmationDialogViews::~ProfileSigninConfirmationDialogViews() {}
8144d362409d5469aed47d19e7908d19bd194493aThomas Graf
8244d362409d5469aed47d19e7908d19bd194493aThomas Graf// static
8344d362409d5469aed47d19e7908d19bd194493aThomas Grafvoid ProfileSigninConfirmationDialogViews::ShowDialog(
8444d362409d5469aed47d19e7908d19bd194493aThomas Graf    Browser* browser,
8544d362409d5469aed47d19e7908d19bd194493aThomas Graf    Profile* profile,
8644d362409d5469aed47d19e7908d19bd194493aThomas Graf    const std::string& username,
8744d362409d5469aed47d19e7908d19bd194493aThomas Graf    ui::ProfileSigninConfirmationDelegate* delegate) {
8844d362409d5469aed47d19e7908d19bd194493aThomas Graf  ProfileSigninConfirmationDialogViews* dialog =
8944d362409d5469aed47d19e7908d19bd194493aThomas Graf      new ProfileSigninConfirmationDialogViews(
9044d362409d5469aed47d19e7908d19bd194493aThomas Graf          browser, profile, username, delegate);
9144d362409d5469aed47d19e7908d19bd194493aThomas Graf  ui::CheckShouldPromptForNewProfile(
9244d362409d5469aed47d19e7908d19bd194493aThomas Graf      profile,
931155370f520cb64657e25153255cf7dc1424317fThomas Graf      // This callback is guaranteed to be invoked, and once it is, the dialog
9444d362409d5469aed47d19e7908d19bd194493aThomas Graf      // owns itself.
9544d362409d5469aed47d19e7908d19bd194493aThomas Graf      base::Bind(&ProfileSigninConfirmationDialogViews::Show,
9644d362409d5469aed47d19e7908d19bd194493aThomas Graf                 base::Unretained(dialog)));
9744d362409d5469aed47d19e7908d19bd194493aThomas Graf}
9844d362409d5469aed47d19e7908d19bd194493aThomas Graf
99535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Grafvoid ProfileSigninConfirmationDialogViews::Show(bool prompt_for_new_profile) {
10044d362409d5469aed47d19e7908d19bd194493aThomas Graf  prompt_for_new_profile_ = prompt_for_new_profile;
10144d362409d5469aed47d19e7908d19bd194493aThomas Graf  CreateDialogWidget(this, NULL, browser_->window()->GetNativeWindow())->Show();
10244d362409d5469aed47d19e7908d19bd194493aThomas Graf}
10344d362409d5469aed47d19e7908d19bd194493aThomas Graf
10444d362409d5469aed47d19e7908d19bd194493aThomas Grafstring16 ProfileSigninConfirmationDialogViews::GetWindowTitle() const {
10544d362409d5469aed47d19e7908d19bd194493aThomas Graf  return l10n_util::GetStringUTF16(
10644d362409d5469aed47d19e7908d19bd194493aThomas Graf      IDS_ENTERPRISE_SIGNIN_TITLE_NEW_STYLE);
10744d362409d5469aed47d19e7908d19bd194493aThomas Graf}
10844d362409d5469aed47d19e7908d19bd194493aThomas Graf
10944d362409d5469aed47d19e7908d19bd194493aThomas Grafstring16 ProfileSigninConfirmationDialogViews::GetDialogButtonLabel(
11044d362409d5469aed47d19e7908d19bd194493aThomas Graf    ui::DialogButton button) const {
11144d362409d5469aed47d19e7908d19bd194493aThomas Graf  return l10n_util::GetStringUTF16((button == ui::DIALOG_BUTTON_OK) ?
11244d362409d5469aed47d19e7908d19bd194493aThomas Graf      IDS_ENTERPRISE_SIGNIN_CONTINUE_NEW_STYLE :
11344d362409d5469aed47d19e7908d19bd194493aThomas Graf      IDS_ENTERPRISE_SIGNIN_CANCEL);
11444d362409d5469aed47d19e7908d19bd194493aThomas Graf}
11544d362409d5469aed47d19e7908d19bd194493aThomas Graf
11644d362409d5469aed47d19e7908d19bd194493aThomas Grafint ProfileSigninConfirmationDialogViews::GetDefaultDialogButton() const {
11744d362409d5469aed47d19e7908d19bd194493aThomas Graf  return ui::DIALOG_BUTTON_NONE;
11844d362409d5469aed47d19e7908d19bd194493aThomas Graf}
11944d362409d5469aed47d19e7908d19bd194493aThomas Graf
12044d362409d5469aed47d19e7908d19bd194493aThomas Grafviews::View* ProfileSigninConfirmationDialogViews::CreateExtraView() {
12144d362409d5469aed47d19e7908d19bd194493aThomas Graf  if (prompt_for_new_profile_) {
12244d362409d5469aed47d19e7908d19bd194493aThomas Graf    const string16 create_profile_text =
12344d362409d5469aed47d19e7908d19bd194493aThomas Graf        l10n_util::GetStringUTF16(
12444d362409d5469aed47d19e7908d19bd194493aThomas Graf            IDS_ENTERPRISE_SIGNIN_CREATE_NEW_PROFILE_NEW_STYLE);
12544d362409d5469aed47d19e7908d19bd194493aThomas Graf    link_ = new views::Link(create_profile_text);
12644d362409d5469aed47d19e7908d19bd194493aThomas Graf    link_->SetUnderline(false);
12744d362409d5469aed47d19e7908d19bd194493aThomas Graf    link_->set_listener(this);
12844d362409d5469aed47d19e7908d19bd194493aThomas Graf    link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
12944d362409d5469aed47d19e7908d19bd194493aThomas Graf  }
13044d362409d5469aed47d19e7908d19bd194493aThomas Graf  return link_;
13144d362409d5469aed47d19e7908d19bd194493aThomas Graf}
1326de17f3308cfd53ad922d144a1b28ddd962d6678Thomas Graf
13323ee46ef7115c2e311c36e43a833e6c3deada18aThomas Grafbool ProfileSigninConfirmationDialogViews::Accept() {
13444d362409d5469aed47d19e7908d19bd194493aThomas Graf  if (delegate_) {
13544d362409d5469aed47d19e7908d19bd194493aThomas Graf    delegate_->OnContinueSignin();
13644d362409d5469aed47d19e7908d19bd194493aThomas Graf    delegate_ = NULL;
13744d362409d5469aed47d19e7908d19bd194493aThomas Graf  }
13844d362409d5469aed47d19e7908d19bd194493aThomas Graf  return true;
13944d362409d5469aed47d19e7908d19bd194493aThomas Graf}
14044d362409d5469aed47d19e7908d19bd194493aThomas Graf
14144d362409d5469aed47d19e7908d19bd194493aThomas Grafbool ProfileSigninConfirmationDialogViews::Cancel() {
14244d362409d5469aed47d19e7908d19bd194493aThomas Graf  if (delegate_) {
14344d362409d5469aed47d19e7908d19bd194493aThomas Graf    delegate_->OnCancelSignin();
14444d362409d5469aed47d19e7908d19bd194493aThomas Graf    delegate_ = NULL;
14544d362409d5469aed47d19e7908d19bd194493aThomas Graf  }
14644d362409d5469aed47d19e7908d19bd194493aThomas Graf  return true;
14744d362409d5469aed47d19e7908d19bd194493aThomas Graf}
14844d362409d5469aed47d19e7908d19bd194493aThomas Graf
14944d362409d5469aed47d19e7908d19bd194493aThomas Grafvoid ProfileSigninConfirmationDialogViews::OnClose() {
15044d362409d5469aed47d19e7908d19bd194493aThomas Graf  Cancel();
15144d362409d5469aed47d19e7908d19bd194493aThomas Graf}
15244d362409d5469aed47d19e7908d19bd194493aThomas Graf
15344d362409d5469aed47d19e7908d19bd194493aThomas Grafui::ModalType ProfileSigninConfirmationDialogViews::GetModalType() const {
15444d362409d5469aed47d19e7908d19bd194493aThomas Graf  return ui::MODAL_TYPE_WINDOW;
15544d362409d5469aed47d19e7908d19bd194493aThomas Graf}
15644d362409d5469aed47d19e7908d19bd194493aThomas Graf
15744d362409d5469aed47d19e7908d19bd194493aThomas Grafvoid ProfileSigninConfirmationDialogViews::ViewHierarchyChanged(
15844d362409d5469aed47d19e7908d19bd194493aThomas Graf    const ViewHierarchyChangedDetails& details) {
15944d362409d5469aed47d19e7908d19bd194493aThomas Graf  if (!details.is_add || details.child != this)
16044d362409d5469aed47d19e7908d19bd194493aThomas Graf    return;
16144d362409d5469aed47d19e7908d19bd194493aThomas Graf
16244d362409d5469aed47d19e7908d19bd194493aThomas Graf  // Layout the labels in a single fixed-width column.
16344d362409d5469aed47d19e7908d19bd194493aThomas Graf  SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
16444d362409d5469aed47d19e7908d19bd194493aThomas Graf
16544d362409d5469aed47d19e7908d19bd194493aThomas Graf  // Create the prompt label.
16644d362409d5469aed47d19e7908d19bd194493aThomas Graf  std::vector<size_t> offsets;
16744d362409d5469aed47d19e7908d19bd194493aThomas Graf  const string16 domain = ASCIIToUTF16(gaia::ExtractDomainName(username_));
16844d362409d5469aed47d19e7908d19bd194493aThomas Graf  const string16 username = ASCIIToUTF16(username_);
16944d362409d5469aed47d19e7908d19bd194493aThomas Graf  const string16 prompt_text =
1703ad4665be2f192291238cbe78118a57ec42436c6Thomas Graf      l10n_util::GetStringFUTF16(
1713ad4665be2f192291238cbe78118a57ec42436c6Thomas Graf          IDS_ENTERPRISE_SIGNIN_ALERT_NEW_STYLE,
172a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf          username, domain, &offsets);
173a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf  views::StyledLabel* prompt_label = new views::StyledLabel(prompt_text, this);
174a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf  views::StyledLabel::RangeStyleInfo bold_style;
17544d362409d5469aed47d19e7908d19bd194493aThomas Graf  bold_style.font_style = gfx::Font::BOLD;
17644d362409d5469aed47d19e7908d19bd194493aThomas Graf  prompt_label->AddStyleRange(
17744d362409d5469aed47d19e7908d19bd194493aThomas Graf      ui::Range(offsets[1], offsets[1] + domain.size()), bold_style);
17844d362409d5469aed47d19e7908d19bd194493aThomas Graf
17944d362409d5469aed47d19e7908d19bd194493aThomas Graf  // Add the prompt label with a darker background and border.
18044d362409d5469aed47d19e7908d19bd194493aThomas Graf  const int kDialogWidth = 440;
18144d362409d5469aed47d19e7908d19bd194493aThomas Graf  views::View* prompt_container = MakeFixedWidth(prompt_label, kDialogWidth);
18244d362409d5469aed47d19e7908d19bd194493aThomas Graf  prompt_container->set_border(
18344d362409d5469aed47d19e7908d19bd194493aThomas Graf      views::Border::CreateSolidSidedBorder(
18444d362409d5469aed47d19e7908d19bd194493aThomas Graf          1, 0, 1, 0,
18544d362409d5469aed47d19e7908d19bd194493aThomas Graf          ui::GetSigninConfirmationPromptBarColor(
18644d362409d5469aed47d19e7908d19bd194493aThomas Graf              ui::kSigninConfirmationPromptBarBorderAlpha)));
18744d362409d5469aed47d19e7908d19bd194493aThomas Graf  prompt_container->set_background(
18844d362409d5469aed47d19e7908d19bd194493aThomas Graf      views::Background::CreateSolidBackground(
18944d362409d5469aed47d19e7908d19bd194493aThomas Graf          ui::GetSigninConfirmationPromptBarColor(
19044d362409d5469aed47d19e7908d19bd194493aThomas Graf              ui::kSigninConfirmationPromptBarBackgroundAlpha)));
19144d362409d5469aed47d19e7908d19bd194493aThomas Graf  AddChildView(prompt_container);
19244d362409d5469aed47d19e7908d19bd194493aThomas Graf
19344d362409d5469aed47d19e7908d19bd194493aThomas Graf  // Create and add the explanation label.
19444d362409d5469aed47d19e7908d19bd194493aThomas Graf  offsets.clear();
19544d362409d5469aed47d19e7908d19bd194493aThomas Graf  const string16 learn_more_text =
19644d362409d5469aed47d19e7908d19bd194493aThomas Graf      l10n_util::GetStringUTF16(
19744d362409d5469aed47d19e7908d19bd194493aThomas Graf          IDS_ENTERPRISE_SIGNIN_PROFILE_LINK_LEARN_MORE);
19844d362409d5469aed47d19e7908d19bd194493aThomas Graf  const string16 signin_explanation_text =
19944d362409d5469aed47d19e7908d19bd194493aThomas Graf      l10n_util::GetStringFUTF16(prompt_for_new_profile_ ?
20044d362409d5469aed47d19e7908d19bd194493aThomas Graf          IDS_ENTERPRISE_SIGNIN_EXPLANATION_WITH_PROFILE_CREATION_NEW_STYLE :
20144d362409d5469aed47d19e7908d19bd194493aThomas Graf          IDS_ENTERPRISE_SIGNIN_EXPLANATION_WITHOUT_PROFILE_CREATION_NEW_STYLE,
20244d362409d5469aed47d19e7908d19bd194493aThomas Graf          username, learn_more_text, &offsets);
20344d362409d5469aed47d19e7908d19bd194493aThomas Graf  explanation_label_ = new views::StyledLabel(signin_explanation_text, this);
20444d362409d5469aed47d19e7908d19bd194493aThomas Graf  views::StyledLabel::RangeStyleInfo link_style =
20544d362409d5469aed47d19e7908d19bd194493aThomas Graf      views::StyledLabel::RangeStyleInfo::CreateForLink();
20644d362409d5469aed47d19e7908d19bd194493aThomas Graf  link_style.font_style = gfx::Font::NORMAL;
20744d362409d5469aed47d19e7908d19bd194493aThomas Graf  explanation_label_->AddStyleRange(
20844d362409d5469aed47d19e7908d19bd194493aThomas Graf      ui::Range(offsets[1], offsets[1] + learn_more_text.size()),
20944d362409d5469aed47d19e7908d19bd194493aThomas Graf      link_style);
21044d362409d5469aed47d19e7908d19bd194493aThomas Graf  // TODO(dconnelly): set the background color on the label (crbug.com/244630)
21144d362409d5469aed47d19e7908d19bd194493aThomas Graf  AddChildView(MakeFixedWidth(explanation_label_, kDialogWidth));
21244d362409d5469aed47d19e7908d19bd194493aThomas Graf}
21344d362409d5469aed47d19e7908d19bd194493aThomas Graf
21444d362409d5469aed47d19e7908d19bd194493aThomas Grafvoid ProfileSigninConfirmationDialogViews::LinkClicked(views::Link* source,
21544d362409d5469aed47d19e7908d19bd194493aThomas Graf                                                       int event_flags) {
21644d362409d5469aed47d19e7908d19bd194493aThomas Graf  if (delegate_) {
21744d362409d5469aed47d19e7908d19bd194493aThomas Graf    delegate_->OnSigninWithNewProfile();
21844d362409d5469aed47d19e7908d19bd194493aThomas Graf    delegate_ = NULL;
21944d362409d5469aed47d19e7908d19bd194493aThomas Graf  }
22044d362409d5469aed47d19e7908d19bd194493aThomas Graf  GetWidget()->Close();
22144d362409d5469aed47d19e7908d19bd194493aThomas Graf}
22244d362409d5469aed47d19e7908d19bd194493aThomas Graf
22344d362409d5469aed47d19e7908d19bd194493aThomas Grafvoid ProfileSigninConfirmationDialogViews::StyledLabelLinkClicked(
22444d362409d5469aed47d19e7908d19bd194493aThomas Graf    const ui::Range& range,
22544d362409d5469aed47d19e7908d19bd194493aThomas Graf    int event_flags) {
22644d362409d5469aed47d19e7908d19bd194493aThomas Graf  chrome::NavigateParams params(
22744d362409d5469aed47d19e7908d19bd194493aThomas Graf      browser_,
22844d362409d5469aed47d19e7908d19bd194493aThomas Graf      GURL("http://support.google.com/chromeos/bin/answer.py?answer=1331549"),
22944d362409d5469aed47d19e7908d19bd194493aThomas Graf      content::PAGE_TRANSITION_LINK);
23044d362409d5469aed47d19e7908d19bd194493aThomas Graf  params.disposition = NEW_POPUP;
23144d362409d5469aed47d19e7908d19bd194493aThomas Graf  params.window_action = chrome::NavigateParams::SHOW_WINDOW;
23244d362409d5469aed47d19e7908d19bd194493aThomas Graf  chrome::Navigate(&params);
23344d362409d5469aed47d19e7908d19bd194493aThomas Graf}
23444d362409d5469aed47d19e7908d19bd194493aThomas Graf