Index: chrome/browser/ui/views/try_chrome_dialog_view.cc |
diff --git a/chrome/browser/first_run/try_chrome_dialog_view.cc b/chrome/browser/ui/views/try_chrome_dialog_view.cc |
similarity index 79% |
rename from chrome/browser/first_run/try_chrome_dialog_view.cc |
rename to chrome/browser/ui/views/try_chrome_dialog_view.cc |
index 4696d13428be980b5e332e55fbadf00f9c344dd4..efd5bfbc98897460679d13095919accf36b487ac 100644 |
--- a/chrome/browser/first_run/try_chrome_dialog_view.cc |
+++ b/chrome/browser/ui/views/try_chrome_dialog_view.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "chrome/browser/first_run/try_chrome_dialog_view.h" |
+#include "chrome/browser/ui/views/try_chrome_dialog_view.h" |
#include <shellapi.h> |
@@ -12,6 +12,7 @@ |
#include "base/run_loop.h" |
#include "base/strings/string16.h" |
#include "chrome/browser/process_singleton.h" |
+#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" |
#include "chrome/grit/chromium_strings.h" |
#include "chrome/grit/generated_resources.h" |
#include "chrome/grit/theme_resources.h" |
@@ -22,6 +23,7 @@ |
#include "ui/aura/window_tree_host.h" |
#include "ui/base/l10n/l10n_util.h" |
#include "ui/base/resource/resource_bundle.h" |
+#include "ui/display/screen.h" |
#include "ui/gfx/image/image.h" |
#include "ui/resources/grit/ui_resources.h" |
#include "ui/views/background.h" |
@@ -33,7 +35,6 @@ |
#include "ui/views/controls/link.h" |
#include "ui/views/controls/separator.h" |
#include "ui/views/layout/grid_layout.h" |
-#include "ui/views/layout/layout_constants.h" |
#include "ui/views/layout/layout_provider.h" |
#include "ui/views/widget/widget.h" |
@@ -64,7 +65,9 @@ TryChromeDialogView::Result TryChromeDialogView::Show( |
return NOT_NOW; |
} |
TryChromeDialogView dialog(flavor); |
- return dialog.ShowModal(listener); |
+ TryChromeDialogView::Result result = dialog.ShowDialog( |
+ listener, kDialogType::MODAL, kUsageType::FOR_CHROME); |
+ return result; |
} |
TryChromeDialogView::TryChromeDialogView(size_t flavor) |
@@ -74,14 +77,14 @@ TryChromeDialogView::TryChromeDialogView(size_t flavor) |
kill_chrome_(NULL), |
dont_try_chrome_(NULL), |
make_default_(NULL), |
- result_(COUNT) { |
-} |
+ result_(COUNT) {} |
-TryChromeDialogView::~TryChromeDialogView() { |
-} |
+TryChromeDialogView::~TryChromeDialogView() {} |
-TryChromeDialogView::Result TryChromeDialogView::ShowModal( |
- const ActiveModalDialogListener& listener) { |
+TryChromeDialogView::Result TryChromeDialogView::ShowDialog( |
+ const ActiveModalDialogListener& listener, |
+ kDialogType dialog_type, |
+ kUsageType usage_type) { |
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
views::ImageView* icon = new views::ImageView(); |
@@ -103,46 +106,53 @@ TryChromeDialogView::Result TryChromeDialogView::ShowModal( |
views::GridLayout* layout = views::GridLayout::CreatePanel(root_view); |
views::ColumnSet* columns; |
+ ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); |
+ const int label_spacing = |
+ provider->GetDistanceMetric(DISTANCE_RELATED_LABEL_HORIZONTAL); |
+ const int unrelated_space_horiz = |
+ provider->GetDistanceMetric(DISTANCE_UNRELATED_CONTROL_HORIZONTAL); |
+ const int unrelated_space_vert = |
+ provider->GetDistanceMetric(DISTANCE_UNRELATED_CONTROL_VERTICAL); |
+ const int button_spacing_horiz = |
+ provider->GetDistanceMetric(views::DISTANCE_RELATED_BUTTON_HORIZONTAL); |
+ |
// First row: [icon][pad][text][pad][button]. |
columns = layout->AddColumnSet(0); |
columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 0, |
views::GridLayout::FIXED, icon_size.width(), |
icon_size.height()); |
- columns->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
+ columns->AddPaddingColumn(0, label_spacing); |
columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, |
views::GridLayout::USE_PREF, 0, 0); |
- columns->AddPaddingColumn(0, views::kUnrelatedControlHorizontalSpacing); |
+ columns->AddPaddingColumn(0, unrelated_space_horiz); |
columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::FILL, 1, |
views::GridLayout::USE_PREF, 0, 0); |
- // Optional second row: [pad][pad][radio 1]. |
+ int icon_padding = icon_size.width() + label_spacing; |
+ // Optional second row: [pad][radio 1]. |
columns = layout->AddColumnSet(1); |
- columns->AddPaddingColumn(0, icon_size.width()); |
- columns->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
+ columns->AddPaddingColumn(0, icon_padding); |
columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 1, |
views::GridLayout::USE_PREF, 0, 0); |
- // Third row: [pad][pad][radio 2]. |
+ // Third row: [pad][radio 2]. |
columns = layout->AddColumnSet(2); |
- columns->AddPaddingColumn(0, icon_size.width()); |
- columns->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
+ columns->AddPaddingColumn(0, icon_padding); |
columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 1, |
views::GridLayout::USE_PREF, 0, 0); |
- // Fourth row: [pad][pad][button][pad][button]. |
+ // Fourth row: [pad][button][pad][button]. |
columns = layout->AddColumnSet(3); |
- columns->AddPaddingColumn(0, icon_size.width()); |
+ columns->AddPaddingColumn(0, icon_padding); |
columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 0, |
views::GridLayout::USE_PREF, 0, 0); |
- columns->AddPaddingColumn(0, views::LayoutProvider::Get()->GetDistanceMetric( |
- views::DISTANCE_RELATED_BUTTON_HORIZONTAL)); |
+ columns->AddPaddingColumn(0, button_spacing_horiz); |
columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 0, |
views::GridLayout::USE_PREF, 0, 0); |
- // Fifth row: [pad][pad][link]. |
+ // Fifth row: [pad][link]. |
columns = layout->AddColumnSet(4); |
- columns->AddPaddingColumn(0, icon_size.width()); |
- columns->AddPaddingColumn(0, views::kRelatedControlHorizontalSpacing); |
+ columns->AddPaddingColumn(0, icon_padding); |
columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 1, |
views::GridLayout::USE_PREF, 0, 0); |
@@ -160,7 +170,7 @@ TryChromeDialogView::Result TryChromeDialogView::ShowModal( |
columns = layout->AddColumnSet(7); |
columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL, 0, |
views::GridLayout::USE_PREF, 0, 0); |
- columns->AddPaddingColumn(0, views::kUnrelatedControlHorizontalSpacing); |
+ columns->AddPaddingColumn(0, unrelated_space_horiz); |
columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::FILL, 1, |
views::GridLayout::USE_PREF, 0, 0); |
@@ -170,7 +180,8 @@ TryChromeDialogView::Result TryChromeDialogView::ShowModal( |
// Find out what experiment we are conducting. |
installer::ExperimentDetails experiment; |
- if (!install_static::SupportsRetentionExperiments() || |
+ if ((usage_type != kUsageType::FOR_TESTING && |
+ !install_static::SupportsRetentionExperiments()) || |
!installer::CreateExperimentDetails(flavor_, &experiment) || |
!experiment.heading) { |
NOTREACHED() << "Cannot determine which headline to show."; |
@@ -230,13 +241,13 @@ TryChromeDialogView::Result TryChromeDialogView::ShowModal( |
views::Separator* separator = NULL; |
if (experiment.flags & installer::kToastUiMakeDefault) { |
- // In this flavor we have some veritical space, then a separator line |
+ // In this flavor we have some vertical space, then a separator line |
// and the 'make default' checkbox and the OK button on the same row. |
- layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
+ layout->AddPaddingRow(0, unrelated_space_vert); |
layout->StartRow(0, 6); |
separator = new views::Separator(); |
layout->AddView(separator); |
- layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
+ layout->AddPaddingRow(0, unrelated_space_vert); |
layout->StartRow(0, 7); |
make_default_ = new views::Checkbox( |
@@ -262,8 +273,8 @@ TryChromeDialogView::Result TryChromeDialogView::ShowModal( |
if (experiment.flags & installer::kToastUiWhyLink) { |
layout->StartRowWithPadding(0, 4, 0, 10); |
- views::Link* link = new views::Link( |
- l10n_util::GetStringUTF16(IDS_TRY_TOAST_WHY)); |
+ views::Link* link = |
+ new views::Link(l10n_util::GetStringUTF16(IDS_TRY_TOAST_WHY)); |
link->set_listener(this); |
layout->AddView(link); |
} |
@@ -287,38 +298,38 @@ TryChromeDialogView::Result TryChromeDialogView::ShowModal( |
// Time to show the window in a modal loop. |
popup_->Show(); |
+ |
if (!listener.is_null()) |
listener.Run(popup_->GetNativeView()); |
- base::RunLoop().Run(); |
- if (!listener.is_null()) |
- listener.Run(NULL); |
+ |
+ // If the dialog is not modal, we don't control when it is going to be |
+ // dismissed and hence we cannot inform the listener about the dialog going |
+ // away. |
+ if (dialog_type == kDialogType::MODAL) { |
+ base::RunLoop().Run(); |
+ if (!listener.is_null()) |
+ listener.Run(nullptr); |
+ } |
return result_; |
} |
-gfx::Rect TryChromeDialogView::ComputeWindowPosition(gfx::Size size, |
+gfx::Rect TryChromeDialogView::ComputeWindowPosition(const gfx::Size& size, |
bool is_RTL) { |
- // A best guess at a visible location in case all else fails. |
- gfx::Point origin(20, 20); |
- |
- // The taskbar (the 'Shell_TrayWnd' window) is always on the primary monitor. |
- constexpr POINT kOrigin = {}; |
- MONITORINFO info = {sizeof(info)}; |
- if (::GetMonitorInfo(::MonitorFromPoint(kOrigin, MONITOR_DEFAULTTOPRIMARY), |
- &info)) { |
- // |rcWork| is the work area, accounting for the visible taskbars. |
- origin.set_x(is_RTL ? info.rcWork.left : info.rcWork.right - size.width()); |
- origin.set_y(info.rcWork.bottom - size.height()); |
- } |
+ gfx::Point origin; |
+ |
+ gfx::Rect work_area = popup_->GetWorkAreaBoundsInScreen(); |
+ origin.set_x(is_RTL ? work_area.x() : work_area.right() - size.width()); |
+ origin.set_y(work_area.bottom()- size.height()); |
- return gfx::Rect(origin, size); |
+ return display::Screen::GetScreen()->ScreenToDIPRectInWindow( |
+ popup_->GetNativeView(), gfx::Rect(origin, size)); |
} |
void TryChromeDialogView::SetToastRegion(HWND window, int w, int h) { |
static const POINT polygon[] = { |
- {0, 4}, {1, 2}, {2, 1}, {4, 0}, // Left side. |
- {w-4, 0}, {w-2, 1}, {w-1, 2}, {w, 4}, // Right side. |
- {w, h}, {0, h} |
- }; |
+ {0, 4}, {1, 2}, {2, 1}, {4, 0}, // Left side. |
+ {w - 4, 0}, {w - 2, 1}, {w - 1, 2}, {w, 4}, // Right side. |
+ {w, h}, {0, h}}; |
HRGN region = ::CreatePolygonRgn(polygon, arraysize(polygon), WINDING); |
::SetWindowRgn(window, region, FALSE); |
} |
@@ -357,7 +368,7 @@ void TryChromeDialogView::ButtonPressed(views::Button* sender, |
if (make_default_) { |
if ((result_ == TRY_CHROME) && make_default_->checked()) |
- result_ = TRY_CHROME_AS_DEFAULT; |
+ result_ = TRY_CHROME_AS_DEFAULT; |
} |
popup_->Close(); |