diff --git a/ash/login/ui/login_auth_user_view.cc b/ash/login/ui/login_auth_user_view.cc
index f9a2b5a44f8ae..693246009b844 100644
--- a/ash/login/ui/login_auth_user_view.cc
+++ b/ash/login/ui/login_auth_user_view.cc
@@ -145,7 +145,8 @@ LoginAuthUserView::LoginAuthUserView(
 
   // Use views::GridLayout instead of views::BoxLayout because views::BoxLayout
   // lays out children according to the view->children order.
-  views::GridLayout* grid_layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* grid_layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   views::ColumnSet* column_set = grid_layout->AddColumnSet(0);
   column_set->AddColumn(views::GridLayout::CENTER, views::GridLayout::LEADING,
                         0 /*resize_percent*/, views::GridLayout::USE_PREF,
diff --git a/ash/login/ui/login_user_view.cc b/ash/login/ui/login_user_view.cc
index f3ec9481cf7ec..5cde22851b8f5 100644
--- a/ash/login/ui/login_user_view.cc
+++ b/ash/login/ui/login_user_view.cc
@@ -484,7 +484,8 @@ void LoginUserView::SetLargeLayout() {
 
   // Use views::GridLayout instead of views::BoxLayout because views::BoxLayout
   // lays out children according to the view->children order.
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   constexpr int kImageColumnId = 0;
   constexpr int kLabelDropdownColumnId = 1;
diff --git a/ash/message_center/notifier_settings_view.cc b/ash/message_center/notifier_settings_view.cc
index a4d167fd213a7..a5a646aabb666 100644
--- a/ash/message_center/notifier_settings_view.cc
+++ b/ash/message_center/notifier_settings_view.cc
@@ -417,7 +417,7 @@ void NotifierSettingsView::NotifierButton::GridChanged() {
   using views::ColumnSet;
   using views::GridLayout;
 
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout = SetLayoutManager(std::make_unique<GridLayout>(this));
   ColumnSet* cs = layout->AddColumnSet(0);
   // Add a column for the checkbox.
   cs->AddPaddingColumn(0, kInnateCheckboxRightPadding);
diff --git a/ash/session/session_aborted_dialog.cc b/ash/session/session_aborted_dialog.cc
index a2daf00f5993b..71a23daefcdd1 100644
--- a/ash/session/session_aborted_dialog.cc
+++ b/ash/session/session_aborted_dialog.cc
@@ -81,7 +81,8 @@ void SessionAbortedDialog::InitDialog(const std::string& user_email) {
   constexpr int kTopInset = 10;
   constexpr int kOtherInset = 40;
   // Create the views and layout manager and set them up.
-  views::GridLayout* grid_layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* grid_layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   SetBorder(views::CreateEmptyBorder(kTopInset, kOtherInset, kOtherInset,
                                      kOtherInset));
 
diff --git a/ash/shell/window_type_launcher.cc b/ash/shell/window_type_launcher.cc
index c2becffcb815b..0bbc8cee98f2f 100644
--- a/ash/shell/window_type_launcher.cc
+++ b/ash/shell/window_type_launcher.cc
@@ -210,7 +210,8 @@ WindowTypeLauncher::WindowTypeLauncher(
           this,
           base::ASCIIToUTF16("Show a web/app notification"))),
       show_views_examples_callback_(show_views_examples_callback) {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   SetBorder(views::CreateEmptyBorder(gfx::Insets(5)));
   views::ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER,
diff --git a/ash/system/date/date_view.cc b/ash/system/date/date_view.cc
index 7d8e71caa8f31..4da303478d155 100644
--- a/ash/system/date/date_view.cc
+++ b/ash/system/date/date_view.cc
@@ -262,7 +262,8 @@ void TimeView::UpdateClockLayout(ClockLayout clock_layout) {
     AddChildView(horizontal_label_.get());
   } else {
     RemoveChildView(horizontal_label_.get());
-    views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+    views::GridLayout* layout =
+        SetLayoutManager(std::make_unique<views::GridLayout>(this));
     const int kColumnId = 0;
     views::ColumnSet* columns = layout->AddColumnSet(kColumnId);
     columns->AddPaddingColumn(0, kVerticalClockLeftPadding);
diff --git a/ash/system/status_area_widget_delegate.cc b/ash/system/status_area_widget_delegate.cc
index aa6a6f3e8e49f..8b83b4c0b2e64 100644
--- a/ash/system/status_area_widget_delegate.cc
+++ b/ash/system/status_area_widget_delegate.cc
@@ -131,7 +131,8 @@ void StatusAreaWidgetDelegate::AddTray(views::View* tray) {
 void StatusAreaWidgetDelegate::UpdateLayout() {
   // Use a grid layout so that the trays can be centered in each cell, and
   // so that the widget gets laid out correctly when tray sizes change.
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // Update tray border based on layout.
   bool is_child_on_edge = true;
diff --git a/chrome/browser/chromeos/enrollment_dialog_view.cc b/chrome/browser/chromeos/enrollment_dialog_view.cc
index a2192b3b75a01..bcf47ebaa41a5 100644
--- a/chrome/browser/chromeos/enrollment_dialog_view.cc
+++ b/chrome/browser/chromeos/enrollment_dialog_view.cc
@@ -165,7 +165,8 @@ void EnrollmentDialogView::InitDialog() {
   label->SetMultiLine(true);
   label->SetAllowCharacterBreak(true);
 
-  views::GridLayout* grid_layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* grid_layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   views::ColumnSet* columns = grid_layout->AddColumnSet(0);
   columns->AddColumn(views::GridLayout::FILL,  // Horizontal resize.
diff --git a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc
index 4981d193fe3ea..77d3e90dd6378 100644
--- a/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc
+++ b/chrome/browser/chromeos/login/ui/simple_web_view_dialog.cc
@@ -67,7 +67,7 @@ class ToolbarRowView : public views::View {
             views::View* forward,
             views::View* reload,
             views::View* location_bar) {
-    GridLayout* layout = GridLayout::CreateAndInstall(this);
+    GridLayout* layout = SetLayoutManager(std::make_unique<GridLayout>(this));
 
     const int related_horizontal_spacing =
         ChromeLayoutProvider::Get()->GetDistanceMetric(
@@ -204,7 +204,7 @@ void SimpleWebViewDialog::Init() {
   toolbar_row->Init(back_, forward_, reload_, location_bar_);
 
   // Layout.
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout = SetLayoutManager(std::make_unique<GridLayout>(this));
 
   views::ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
diff --git a/chrome/browser/chromeos/options/vpn_config_view.cc b/chrome/browser/chromeos/options/vpn_config_view.cc
index 14a267dd8e9d1..bcddaa26d03a2 100644
--- a/chrome/browser/chromeos/options/vpn_config_view.cc
+++ b/chrome/browser/chromeos/options/vpn_config_view.cc
@@ -506,7 +506,8 @@ void VPNConfigView::Init() {
     DCHECK(vpn && vpn->type() == shill::kTypeVPN);
   }
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // Observer any changes to the certificate list.
   CertLibrary::Get()->AddObserver(this);
diff --git a/chrome/browser/chromeos/options/wifi_config_view.cc b/chrome/browser/chromeos/options/wifi_config_view.cc
index 5ea38149d2786..cb6b0a3abe15f 100644
--- a/chrome/browser/chromeos/options/wifi_config_view.cc
+++ b/chrome/browser/chromeos/options/wifi_config_view.cc
@@ -943,7 +943,8 @@ void WifiConfigView::Init(bool show_8021x) {
       ParseUIProperty(&passphrase_ui_data_, network, ::onc::wifi::kPassphrase);
   }
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   const int column_view_set_id = 0;
   views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id);
diff --git a/chrome/browser/chromeos/options/wimax_config_view.cc b/chrome/browser/chromeos/options/wimax_config_view.cc
index d28c71b3ef306..fc498ecd80a28 100644
--- a/chrome/browser/chromeos/options/wimax_config_view.cc
+++ b/chrome/browser/chromeos/options/wimax_config_view.cc
@@ -212,7 +212,8 @@ void WimaxConfigView::Init() {
   WifiConfigView::ParseUIProperty(
       &passphrase_ui_data_, wimax, ::onc::wifi::kPassphrase);
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   const int column_view_set_id = 0;
   views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id);
diff --git a/chrome/browser/chromeos/ui/request_pin_view.cc b/chrome/browser/chromeos/ui/request_pin_view.cc
index 033c3639b17ff..1106c0cd278e1 100644
--- a/chrome/browser/chromeos/ui/request_pin_view.cc
+++ b/chrome/browser/chromeos/ui/request_pin_view.cc
@@ -164,7 +164,8 @@ void RequestPinView::Init() {
   set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType(
       views::TEXT, views::TEXT));
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   int column_view_set_id = 0;
   views::ColumnSet* column_set = layout->AddColumnSet(column_view_set_id);
diff --git a/chrome/browser/ui/views/accessibility/invert_bubble_view.cc b/chrome/browser/ui/views/accessibility/invert_bubble_view.cc
index 35421ac209f75..c19388253b552 100644
--- a/chrome/browser/ui/views/accessibility/invert_bubble_view.cc
+++ b/chrome/browser/ui/views/accessibility/invert_bubble_view.cc
@@ -113,7 +113,8 @@ void InvertBubbleView::Init() {
   close_->SetFontList(original_font_list);
   close_->set_listener(this);
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   views::ColumnSet* columns = layout->AddColumnSet(0);
   for (int i = 0; i < 4; i++) {
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc
index 70dc99371724d..039cf310585d5 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc
@@ -90,7 +90,7 @@ class RevokeButton : public views::ImageButton, public views::ButtonListener {
 class BulletedPermissionsList : public views::View {
  public:
   BulletedPermissionsList() {
-    layout_ = views::GridLayout::CreateAndInstall(this);
+    layout_ = SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
     // Create 3 columns: the bullet, the bullet text, and the revoke button.
     views::ColumnSet* column_set = layout_->AddColumnSet(kBulletColumnSetId);
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
index 91f19d955fbd4..7abeb9a28bf30 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
@@ -277,7 +277,8 @@ void BookmarkBubbleView::Init() {
 
   SetLayoutManager(std::make_unique<views::FillLayout>());
   bookmark_contents_view_ = new views::View();
-  GridLayout* layout = GridLayout::CreateAndInstall(bookmark_contents_view_);
+  GridLayout* layout = bookmark_contents_view_->SetLayoutManager(
+      std::make_unique<views::GridLayout>(bookmark_contents_view_));
 
   constexpr int kColumnId = 0;
   ConfigureTextfieldStack(layout, kColumnId);
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
index 37b39b244ce61..04c97be647814 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
@@ -336,7 +336,8 @@ void BookmarkEditorView::Init() {
     new_folder_button_->SetEnabled(false);
   }
 
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
 
   const int labels_column_set_id = 0;
diff --git a/chrome/browser/ui/views/certificate_selector.cc b/chrome/browser/ui/views/certificate_selector.cc
index 91d52bb4da0d5..3c269244198ae 100644
--- a/chrome/browser/ui/views/certificate_selector.cc
+++ b/chrome/browser/ui/views/certificate_selector.cc
@@ -200,7 +200,8 @@ void CertificateSelector::Show() {
 
 void CertificateSelector::InitWithText(
     std::unique_ptr<views::View> text_label) {
-  views::GridLayout* const layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* const layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   const int kColumnSetId = 0;
   views::ColumnSet* const column_set = layout->AddColumnSet(kColumnSetId);
diff --git a/chrome/browser/ui/views/collected_cookies_views.cc b/chrome/browser/ui/views/collected_cookies_views.cc
index f142b72f83bdc..74c221766ff44 100644
--- a/chrome/browser/ui/views/collected_cookies_views.cc
+++ b/chrome/browser/ui/views/collected_cookies_views.cc
@@ -397,7 +397,8 @@ CollectedCookiesViews::~CollectedCookiesViews() {
 void CollectedCookiesViews::Init() {
   using views::GridLayout;
 
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
   if (provider->UseExtraDialogPadding()) {
     SetBorder(
@@ -472,7 +473,9 @@ views::View* CollectedCookiesViews::CreateAllowedPane() {
   using views::GridLayout;
 
   views::View* pane = new views::View();
-  GridLayout* layout = GridLayout::CreateAndInstall(pane);
+  GridLayout* layout =
+      pane->SetLayoutManager(std::make_unique<views::GridLayout>(pane));
+
   pane->SetBorder(
       views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric(
           views::INSETS_DIALOG_SUBSECTION)));
@@ -535,7 +538,8 @@ views::View* CollectedCookiesViews::CreateBlockedPane() {
   using views::GridLayout;
 
   views::View* pane = new views::View();
-  GridLayout* layout = GridLayout::CreateAndInstall(pane);
+  GridLayout* layout =
+      pane->SetLayoutManager(std::make_unique<views::GridLayout>(pane));
   pane->SetBorder(
       views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric(
           views::INSETS_DIALOG_SUBSECTION)));
@@ -567,8 +571,8 @@ std::unique_ptr<views::View> CollectedCookiesViews::CreateButtonsPane() {
 
   {
     auto allowed = std::make_unique<views::View>();
-    views::GridLayout* layout =
-        views::GridLayout::CreateAndInstall(allowed.get());
+    views::GridLayout* layout = allowed->SetLayoutManager(
+        std::make_unique<views::GridLayout>(allowed.get()));
 
     block_allowed_button_ = views::MdTextButton::CreateSecondaryUiButton(
         this, l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_BLOCK_BUTTON));
@@ -584,8 +588,8 @@ std::unique_ptr<views::View> CollectedCookiesViews::CreateButtonsPane() {
 
   {
     auto blocked = std::make_unique<views::View>();
-    views::GridLayout* layout =
-        views::GridLayout::CreateAndInstall(blocked.get());
+    views::GridLayout* layout = blocked->SetLayoutManager(
+        std::make_unique<views::GridLayout>(blocked.get()));
     blocked->SetVisible(false);
 
     allow_blocked_button_ = views::MdTextButton::CreateSecondaryUiButton(
diff --git a/chrome/browser/ui/views/confirm_bubble_views.cc b/chrome/browser/ui/views/confirm_bubble_views.cc
index 82a52d4694e0d..483334e70e112 100644
--- a/chrome/browser/ui/views/confirm_bubble_views.cc
+++ b/chrome/browser/ui/views/confirm_bubble_views.cc
@@ -22,7 +22,8 @@ ConfirmBubbleViews::ConfirmBubbleViews(
     : model_(std::move(model)), link_(NULL) {
   set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType(
       views::TEXT, views::TEXT));
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // Use a fixed maximum message width, so longer messages will wrap.
   const int kMaxMessageWidth = 400;
diff --git a/chrome/browser/ui/views/content_setting_bubble_contents.cc b/chrome/browser/ui/views/content_setting_bubble_contents.cc
index a17121d641b29..827f1bf4cf5de 100644
--- a/chrome/browser/ui/views/content_setting_bubble_contents.cc
+++ b/chrome/browser/ui/views/content_setting_bubble_contents.cc
@@ -252,7 +252,8 @@ int ContentSettingBubbleContents::ListItemContainer::GetRowIndexOf(
 
 void ContentSettingBubbleContents::ListItemContainer::ResetLayout() {
   using views::GridLayout;
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   views::ColumnSet* item_list_column_set = layout->AddColumnSet(0);
   item_list_column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 0,
                                   GridLayout::USE_PREF, 0, 0);
@@ -377,7 +378,8 @@ bool ContentSettingBubbleContents::ShouldShowCloseButton() const {
 void ContentSettingBubbleContents::Init() {
   using views::GridLayout;
 
-  GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   const ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
   const int related_control_horizontal_spacing =
       provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_HORIZONTAL);
diff --git a/chrome/browser/ui/views/cookie_info_view.cc b/chrome/browser/ui/views/cookie_info_view.cc
index 799ab4ee573be..6763a19ee20a1 100644
--- a/chrome/browser/ui/views/cookie_info_view.cc
+++ b/chrome/browser/ui/views/cookie_info_view.cc
@@ -148,7 +148,8 @@ void CookieInfoView::Init() {
       l10n_util::GetStringUTF16(IDS_COOKIES_COOKIE_EXPIRES_LABEL));
   expires_value_field_ = new views::Textfield;
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
   const gfx::Insets& dialog_insets =
       provider->GetInsetsMetric(views::INSETS_DIALOG);
diff --git a/chrome/browser/ui/views/create_application_shortcut_view.cc b/chrome/browser/ui/views/create_application_shortcut_view.cc
index eb5afb0f234b1..5914b70f0d879 100644
--- a/chrome/browser/ui/views/create_application_shortcut_view.cc
+++ b/chrome/browser/ui/views/create_application_shortcut_view.cc
@@ -106,7 +106,8 @@ void CreateChromeApplicationShortcutView::InitControls() {
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
 
   // Layout controls
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   static const int kHeaderColumnSetId = 0;
   views::ColumnSet* column_set = layout->AddColumnSet(kHeaderColumnSetId);
diff --git a/chrome/browser/ui/views/crypto_module_password_dialog_view.cc b/chrome/browser/ui/views/crypto_module_password_dialog_view.cc
index 70d3a1ccfdda7..d307e54b987f0 100644
--- a/chrome/browser/ui/views/crypto_module_password_dialog_view.cc
+++ b/chrome/browser/ui/views/crypto_module_password_dialog_view.cc
@@ -125,7 +125,8 @@ void CryptoModulePasswordDialogView::Init(const std::string& hostname,
 
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   views::ColumnSet* reason_column_set = layout->AddColumnSet(0);
   reason_column_set->AddColumn(
diff --git a/chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bubble_view.cc b/chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bubble_view.cc
index 0639acffcb18b..9df9f36fd7d90 100644
--- a/chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bubble_view.cc
+++ b/chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bubble_view.cc
@@ -40,7 +40,8 @@ DesktopIOSPromotionBubbleView::DesktopIOSPromotionBubbleView(
           base::MakeUnique<DesktopIOSPromotionBubbleController>(profile,
                                                                 this,
                                                                 entry_point)) {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
   SetBorder(views::CreateEmptyBorder(
       0,
diff --git a/chrome/browser/ui/views/download/download_danger_prompt_views.cc b/chrome/browser/ui/views/download/download_danger_prompt_views.cc
index d004b1ee98c9a..23b28c7d4ddd5 100644
--- a/chrome/browser/ui/views/download/download_danger_prompt_views.cc
+++ b/chrome/browser/ui/views/download/download_danger_prompt_views.cc
@@ -98,8 +98,8 @@ DownloadDangerPromptViews::DownloadDangerPromptViews(
 
   set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType(
       views::TEXT, views::TEXT));
-  views::GridLayout* layout =
-      views::GridLayout::CreateAndInstall(contents_view_);
+  views::GridLayout* layout = contents_view_->SetLayoutManager(
+      std::make_unique<views::GridLayout>(contents_view_));
 
   views::ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
diff --git a/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc b/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc
index 7cc34562f914e..130ff981cc3fb 100644
--- a/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc
+++ b/chrome/browser/ui/views/extensions/bookmark_app_confirmation_view.cc
@@ -43,7 +43,8 @@ BookmarkAppConfirmationView::BookmarkAppConfirmationView(
   const ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get();
   set_margins(layout_provider->GetDialogInsetsForContentType(views::CONTROL,
                                                              views::CONTROL));
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   constexpr int kColumnSetId = 0;
 
   views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId);
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
index 65673b2c45e3f..62bf7338b99dc 100644
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
@@ -222,7 +222,8 @@ class CustomScrollableView : public views::View {
 }  // namespace
 
 BulletedView::BulletedView(views::View* view) {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   views::ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(views::GridLayout::CENTER, views::GridLayout::LEADING,
                         0, views::GridLayout::FIXED, kBulletWidth, 0);
@@ -347,8 +348,8 @@ void ExtensionInstallDialogView::InitView() {
   // Create the scrollable view which will contain the permissions and retained
   // files/devices. It will span the full content width.
   CustomScrollableView* scrollable = new CustomScrollableView();
-  views::GridLayout* scroll_layout =
-      views::GridLayout::CreateAndInstall(scrollable);
+  views::GridLayout* scroll_layout = scrollable->SetLayoutManager(
+      std::make_unique<views::GridLayout>(scrollable));
 
   views::ColumnSet* scrollable_column_set =
       scroll_layout->AddColumnSet(column_set_id);
@@ -518,7 +519,8 @@ views::GridLayout* ExtensionInstallDialogView::CreateLayout(
   // extension icon can be shown on the right of the dialog title, but on the
   // same y-axis, and the scroll view used to contain other content can have its
   // scrollbar aligned with the right edge of the dialog.
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(container_);
+  views::GridLayout* layout = container_->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container_));
   container_->SetBorder(views::CreateEmptyBorder(0, content_insets.left(),
                                                  content_insets.bottom(), 0));
   AddChildView(container_);
@@ -729,7 +731,8 @@ ExpandableContainerView::ExpandableContainerView(
       expanded_(false) {
   DCHECK(!details.empty());
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   constexpr int kColumnSetId = 0;
   views::ColumnSet* column_set = layout->AddColumnSet(kColumnSetId);
 
diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
index 512b82066f951..9e3de291201bb 100644
--- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
+++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
@@ -103,7 +103,8 @@ void MediaGalleriesDialogViews::InitChildViews() {
 
   const int dialog_content_width = views::Widget::GetLocalizedContentsWidth(
       IDS_MEDIA_GALLERIES_DIALOG_CONTENT_WIDTH_CHARS);
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(contents_);
+  views::GridLayout* layout = contents_->SetLayoutManager(
+      std::make_unique<views::GridLayout>(contents_));
 
   int column_set_id = 0;
   views::ColumnSet* columns = layout->AddColumnSet(column_set_id);
diff --git a/chrome/browser/ui/views/first_run_bubble.cc b/chrome/browser/ui/views/first_run_bubble.cc
index 35c67d340a66c..643f7c838588f 100644
--- a/chrome/browser/ui/views/first_run_bubble.cc
+++ b/chrome/browser/ui/views/first_run_bubble.cc
@@ -70,7 +70,8 @@ void FirstRunBubble::Init() {
   views::Label* subtext = new views::Label(
       l10n_util::GetStringUTF16(IDS_FR_BUBBLE_SUBTEXT), {original_font_list});
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
 
diff --git a/chrome/browser/ui/views/first_run_dialog.cc b/chrome/browser/ui/views/first_run_dialog.cc
index 1607aaad7e70f..68d39c020629e 100644
--- a/chrome/browser/ui/views/first_run_dialog.cc
+++ b/chrome/browser/ui/views/first_run_dialog.cc
@@ -72,7 +72,8 @@ FirstRunDialog::FirstRunDialog(Profile* profile)
       report_crashes_(NULL) {
   set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType(
       views::CONTROL, views::CONTROL));
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   views::ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0,
diff --git a/chrome/browser/ui/views/global_error_bubble_view.cc b/chrome/browser/ui/views/global_error_bubble_view.cc
index 3d16cba460899..0ab95a5c72d2d 100644
--- a/chrome/browser/ui/views/global_error_bubble_view.cc
+++ b/chrome/browser/ui/views/global_error_bubble_view.cc
@@ -116,7 +116,8 @@ void GlobalErrorBubbleView::Init() {
     message_labels.push_back(message_label);
   }
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // First row, message labels.
   views::ColumnSet* cs = layout->AddColumnSet(0);
diff --git a/chrome/browser/ui/views/harmony/bulleted_label_list_view.cc b/chrome/browser/ui/views/harmony/bulleted_label_list_view.cc
index 2f80b0163ee88..8b6b3d68e5c71 100644
--- a/chrome/browser/ui/views/harmony/bulleted_label_list_view.cc
+++ b/chrome/browser/ui/views/harmony/bulleted_label_list_view.cc
@@ -52,7 +52,8 @@ BulletedLabelListView::BulletedLabelListView(
   constexpr auto USE_PREF = views::GridLayout::USE_PREF;
   constexpr auto FIXED = views::GridLayout::FIXED;
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   views::ColumnSet* columns = layout->AddColumnSet(kColumnSetId);
 
   int width = ChromeLayoutProvider::Get()->GetDistanceMetric(
diff --git a/chrome/browser/ui/views/hover_button.cc b/chrome/browser/ui/views/hover_button.cc
index 23cbc1c5f7164..d72687cfe40a4 100644
--- a/chrome/browser/ui/views/hover_button.cc
+++ b/chrome/browser/ui/views/hover_button.cc
@@ -120,7 +120,8 @@ HoverButton::HoverButton(views::ButtonListener* button_listener,
 
   SetBorder(CreateBorderWithVerticalSpacing(remaining_vert_spacing));
 
-  views::GridLayout* grid_layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* grid_layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   // Badging may make the icon slightly wider (but not taller). However, the
   // layout should be the same whether or not the icon is badged, so allow the
   // badged part of the icon to extend into the padding.
diff --git a/chrome/browser/ui/views/hung_renderer_view.cc b/chrome/browser/ui/views/hung_renderer_view.cc
index 49b6f6472c7fd..c740c91f9d76d 100644
--- a/chrome/browser/ui/views/hung_renderer_view.cc
+++ b/chrome/browser/ui/views/hung_renderer_view.cc
@@ -448,7 +448,8 @@ void HungRendererDialogView::Init() {
 
   using views::GridLayout;
 
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
 
   constexpr int kColumnSetId = 0;
diff --git a/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc b/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc
index a4f7893c839f4..5d3b2e1266a7e 100644
--- a/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc
+++ b/chrome/browser/ui/views/ime/ime_warning_bubble_view.cc
@@ -159,7 +159,8 @@ void ImeWarningBubbleView::InitLayout() {
   // -----------------------------------------
   //
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   int cs_id = 0;
 
diff --git a/chrome/browser/ui/views/intent_picker_bubble_view.cc b/chrome/browser/ui/views/intent_picker_bubble_view.cc
index 57f478f6bad95..29c2ac4200d94 100644
--- a/chrome/browser/ui/views/intent_picker_bubble_view.cc
+++ b/chrome/browser/ui/views/intent_picker_bubble_view.cc
@@ -211,7 +211,8 @@ bool IntentPickerBubbleView::ShouldShowCloseButton() const {
 }
 
 void IntentPickerBubbleView::Init() {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // Creates a view to hold the views for each app.
   views::View* scrollable_view = new views::View();
diff --git a/chrome/browser/ui/views/login_view.cc b/chrome/browser/ui/views/login_view.cc
index 541a03bf153c9..23c10bc79fd2c 100644
--- a/chrome/browser/ui/views/login_view.cc
+++ b/chrome/browser/ui/views/login_view.cc
@@ -53,7 +53,8 @@ LoginView::LoginView(const base::string16& authority,
       provider->GetDialogInsetsForContentType(views::TEXT, views::CONTROL)));
 
   // Initialize the Grid Layout Manager used for this dialog box.
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   views::ColumnSet* column_set = layout->AddColumnSet(kHeaderColumnSetId);
   column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, kStretchy,
                         GridLayout::FIXED, kMessageWidth, 0);
diff --git a/chrome/browser/ui/views/page_info/chosen_object_view.cc b/chrome/browser/ui/views/page_info/chosen_object_view.cc
index 7915b52740dfb..4aff5eb16decc 100644
--- a/chrome/browser/ui/views/page_info/chosen_object_view.cc
+++ b/chrome/browser/ui/views/page_info/chosen_object_view.cc
@@ -31,7 +31,8 @@ ChosenObjectView::ChosenObjectView(
 
   constexpr float kFixed = 0.f;
   constexpr float kStretchy = 1.f;
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   const int column_set_id = 0;
   views::ColumnSet* column_set = layout->AddColumnSet(column_set_id);
   column_set->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER,
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
index f1b91158e6200..c541da5d062c1 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
@@ -122,7 +122,8 @@ views::View* CreateMoreInfoLinkSection(views::LinkListener* listener,
   (*link)->SetTooltipText(tooltip_text);
 
   views::View* new_view = new views::View();
-  GridLayout* layout = GridLayout::CreateAndInstall(new_view);
+  GridLayout* layout =
+      new_view->SetLayoutManager(std::make_unique<views::GridLayout>(new_view));
   ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
   const int side_margin =
       provider->GetInsetsMetric(views::INSETS_DIALOG_SUBSECTION).left();
@@ -312,7 +313,8 @@ BubbleHeaderView::BubbleHeaderView(
       password_reuse_button_container_(nullptr),
       change_password_button_(nullptr),
       whitelist_password_reuse_button_(nullptr) {
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   const int label_column_status = 1;
   AddColumnWithSideMargin(layout, side_margin, label_column_status);
@@ -573,7 +575,8 @@ PageInfoBubbleView::PageInfoBubbleView(
       UseHarmonyStyle() ? hover_list_spacing : margins().bottom();
   set_margins(gfx::Insets(margins().top(), 0, bottom_margin, 0));
 
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   constexpr int kColumnId = 0;
   views::ColumnSet* column_set = layout->AddColumnSet(kColumnId);
   column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
@@ -756,7 +759,8 @@ void PageInfoBubbleView::SetPermissionInfo(
   if (permissions_view_->has_children())
     return;
 
-  GridLayout* layout = GridLayout::CreateAndInstall(permissions_view_);
+  GridLayout* layout = permissions_view_->SetLayoutManager(
+      std::make_unique<views::GridLayout>(permissions_view_));
 
   ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get();
   const int list_item_padding =
diff --git a/chrome/browser/ui/views/passwords/credentials_selection_view.cc b/chrome/browser/ui/views/passwords/credentials_selection_view.cc
index 8b43b95376e49..d86e24da8a532 100644
--- a/chrome/browser/ui/views/passwords/credentials_selection_view.cc
+++ b/chrome/browser/ui/views/passwords/credentials_selection_view.cc
@@ -38,7 +38,8 @@ CredentialsSelectionView::CredentialsSelectionView(
   DCHECK(!password_forms_->empty());
 
   // Layout.
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   SetLayoutManager(layout);
 
   // ColumnSet.
diff --git a/chrome/browser/ui/views/passwords/manage_password_items_view.cc b/chrome/browser/ui/views/passwords/manage_password_items_view.cc
index aab01ea7ef165..800181f3b0aa3 100644
--- a/chrome/browser/ui/views/passwords/manage_password_items_view.cc
+++ b/chrome/browser/ui/views/passwords/manage_password_items_view.cc
@@ -250,7 +250,8 @@ void ManagePasswordItemsView::RecreateLayout() {
 
   RemoveAllChildViews(true);
 
-  views::GridLayout* grid_layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* grid_layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   const int vertical_padding = ChromeLayoutProvider::Get()->GetDistanceMetric(
       DISTANCE_CONTROL_LIST_VERTICAL);
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
index 106a0c7e73f41..72e9b46644849 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
+++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
@@ -558,7 +558,8 @@ gfx::Size ManagePasswordsBubbleView::PendingView::CalculatePreferredSize()
 
 void ManagePasswordsBubbleView::PendingView::CreateAndSetLayout(
     bool show_password_label) {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0));
 
   views::View* password_field =
@@ -663,7 +664,8 @@ class ManagePasswordsBubbleView::SaveConfirmationView
 ManagePasswordsBubbleView::SaveConfirmationView::SaveConfirmationView(
     ManagePasswordsBubbleView* parent)
     : parent_(parent) {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0));
 
   views::StyledLabel* confirmation =
@@ -733,7 +735,8 @@ class ManagePasswordsBubbleView::SignInPromoView
 ManagePasswordsBubbleView::SignInPromoView::SignInPromoView(
     ManagePasswordsBubbleView* parent)
     : parent_(parent) {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0));
 
   signin_button_ = views::MdTextButton::CreateSecondaryUiBlueButton(
@@ -800,7 +803,8 @@ ManagePasswordsBubbleView::UpdatePendingView::UpdatePendingView(
     ManagePasswordsBubbleView* parent)
     : parent_(parent), selection_view_(nullptr) {
   ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get();
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0));
 
   // Credential row.
diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc
index b25ad0aab5de4..3228843706ab3 100644
--- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc
+++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc
@@ -293,7 +293,7 @@ CreditCardEditorViewController::CreateCustomFieldView(
   } else {
     // Two comboboxes, one for month and the other for year.
     views::GridLayout* combobox_layout =
-        views::GridLayout::CreateAndInstall(view.get());
+        view->SetLayoutManager(std::make_unique<views::GridLayout>(view.get()));
     views::ColumnSet* columns = combobox_layout->AddColumnSet(0);
     columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 1,
                        views::GridLayout::USE_PREF, 0, 0);
diff --git a/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc b/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc
index 81b047985f5fe..148f3d0775306 100644
--- a/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc
+++ b/chrome/browser/ui/views/payments/cvc_unmask_view_controller.cc
@@ -148,7 +148,8 @@ base::string16 CvcUnmaskViewController::GetSheetTitle() {
 }
 
 void CvcUnmaskViewController::FillContentView(views::View* content_view) {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(content_view);
+  views::GridLayout* layout = content_view->SetLayoutManager(
+      std::make_unique<views::GridLayout>(content_view));
   content_view->SetBorder(views::CreateEmptyBorder(
       kPaymentRequestRowVerticalInsets, kPaymentRequestRowHorizontalInsets,
       kPaymentRequestRowVerticalInsets, kPaymentRequestRowHorizontalInsets));
diff --git a/chrome/browser/ui/views/payments/editor_view_controller.cc b/chrome/browser/ui/views/payments/editor_view_controller.cc
index 276f15488768d..344c04db5a9f8 100644
--- a/chrome/browser/ui/views/payments/editor_view_controller.cc
+++ b/chrome/browser/ui/views/payments/editor_view_controller.cc
@@ -251,8 +251,8 @@ std::unique_ptr<views::View> EditorViewController::CreateEditorView() {
   constexpr int kShortFieldMinimumWidth = 176;
   constexpr int kLongFieldMinimumWidth = 272;
 
-  views::GridLayout* editor_layout =
-      views::GridLayout::CreateAndInstall(editor_view.get());
+  views::GridLayout* editor_layout = editor_view->SetLayoutManager(
+      std::make_unique<views::GridLayout>(editor_view.get()));
   // Column set for short fields.
   views::ColumnSet* columns_short = editor_layout->AddColumnSet(0);
   columns_short->AddColumn(views::GridLayout::LEADING,
diff --git a/chrome/browser/ui/views/payments/order_summary_view_controller.cc b/chrome/browser/ui/views/payments/order_summary_view_controller.cc
index a0d1db93eea6b..87cacaab18700 100644
--- a/chrome/browser/ui/views/payments/order_summary_view_controller.cc
+++ b/chrome/browser/ui/views/payments/order_summary_view_controller.cc
@@ -57,7 +57,8 @@ std::unique_ptr<views::View> CreateLineItemView(const base::string16& label,
           ui::NativeTheme::kColorId_SeparatorColor),
       row_insets));
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(row.get());
+  views::GridLayout* layout =
+      row->SetLayoutManager(std::make_unique<views::GridLayout>(row.get()));
 
   views::ColumnSet* columns = layout->AddColumnSet(0);
   // The first column has resize_percent = 1 so that it stretches all the way
@@ -94,8 +95,8 @@ std::unique_ptr<views::View> CreateLineItemView(const base::string16& label,
   amount_text->SetAllowCharacterBreak(true);
 
   std::unique_ptr<views::View> amount_wrapper = base::MakeUnique<views::View>();
-  views::GridLayout* wrapper_layout =
-      views::GridLayout::CreateAndInstall(amount_wrapper.get());
+  views::GridLayout* wrapper_layout = amount_wrapper->SetLayoutManager(
+      std::make_unique<views::GridLayout>(amount_wrapper.get()));
   views::ColumnSet* wrapper_columns = wrapper_layout->AddColumnSet(0);
   wrapper_columns->AddColumn(views::GridLayout::LEADING,
                              views::GridLayout::CENTER, 0,
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
index db07676ed79e9..47468319d5f24 100644
--- a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
+++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
@@ -371,8 +371,8 @@ void PaymentRequestDialogView::SetupSpinnerOverlay() {
   // would be under it.
   throbber_overlay_.SetBackground(views::CreateSolidBackground(SK_ColorWHITE));
 
-  views::GridLayout* layout =
-      views::GridLayout::CreateAndInstall(&throbber_overlay_);
+  views::GridLayout* layout = throbber_overlay_.SetLayoutManager(
+      std::make_unique<views::GridLayout>(&throbber_overlay_));
   views::ColumnSet* throbber_columns = layout->AddColumnSet(0);
   throbber_columns->AddPaddingColumn(0.5, 0);
   throbber_columns->AddColumn(views::GridLayout::Alignment::CENTER,
diff --git a/chrome/browser/ui/views/payments/payment_request_item_list.cc b/chrome/browser/ui/views/payments/payment_request_item_list.cc
index 3420c0e631f2f..e7c96f98bfa3d 100644
--- a/chrome/browser/ui/views/payments/payment_request_item_list.cc
+++ b/chrome/browser/ui/views/payments/payment_request_item_list.cc
@@ -63,7 +63,8 @@ void PaymentRequestItemList::Item::Init() {
   std::unique_ptr<views::View> content =
       CreateContentView(&accessible_item_description_);
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // Add a column for the item's content view.
   views::ColumnSet* columns = layout->AddColumnSet(0);
diff --git a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
index cf1a391e78ee8..a609b34b47a14 100644
--- a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
+++ b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
@@ -218,7 +218,8 @@ std::unique_ptr<views::View> PaymentRequestSheetController::CreateView() {
   // layer) won't do proper clipping.
   view->SetPaintToLayer();
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(view.get());
+  views::GridLayout* layout =
+      view->SetLayoutManager(std::make_unique<views::GridLayout>(view.get()));
 
   // Note: each view is responsible for its own padding (insets).
   views::ColumnSet* columns = layout->AddColumnSet(0);
@@ -236,7 +237,8 @@ std::unique_ptr<views::View> PaymentRequestSheetController::CreateView() {
   // otherwise it'll be sized to the ScrollView's viewport height, preventing
   // the scroll bar from ever being shown.
   pane_ = new views::View;
-  views::GridLayout* pane_layout = views::GridLayout::CreateAndInstall(pane_);
+  views::GridLayout* pane_layout =
+      pane_->SetLayoutManager(std::make_unique<views::GridLayout>(pane_));
   views::ColumnSet* pane_columns = pane_layout->AddColumnSet(0);
   pane_columns->AddColumn(views::GridLayout::Alignment::FILL,
                           views::GridLayout::Alignment::LEADING, 0,
@@ -343,8 +345,8 @@ std::unique_ptr<views::View> PaymentRequestSheetController::CreateFooterView() {
   container->SetBorder(
       views::CreateEmptyBorder(kInset, kInset, kInset, kInset));
 
-  views::GridLayout* layout =
-      views::GridLayout::CreateAndInstall(container.get());
+  views::GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container.get()));
 
   views::ColumnSet* columns = layout->AddColumnSet(0);
   columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER,
diff --git a/chrome/browser/ui/views/payments/payment_request_views_util.cc b/chrome/browser/ui/views/payments/payment_request_views_util.cc
index e87a80b35ccbe..c78516f7a912c 100644
--- a/chrome/browser/ui/views/payments/payment_request_views_util.cc
+++ b/chrome/browser/ui/views/payments/payment_request_views_util.cc
@@ -185,8 +185,8 @@ std::unique_ptr<views::View> CreateSheetHeaderView(
     const base::string16& title,
     views::ButtonListener* listener) {
   std::unique_ptr<views::View> container = base::MakeUnique<views::View>();
-  views::GridLayout* layout =
-      views::GridLayout::CreateAndInstall(container.get());
+  views::GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container.get()));
 
   constexpr int kHeaderTopVerticalInset = 14;
   constexpr int kHeaderBottomVerticalInset = 8;
diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
index fee876fa9830c..89d198c748b30 100644
--- a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
+++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
@@ -151,7 +151,8 @@ std::unique_ptr<PaymentRequestRowView> CreatePaymentSheetRow(
       kPaymentRequestRowVerticalInsets, trailing_inset);
   std::unique_ptr<PaymentRequestRowView> row =
       base::MakeUnique<PaymentRequestRowView>(listener, clickable, row_insets);
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(row.get());
+  views::GridLayout* layout =
+      row->SetLayoutManager(std::make_unique<views::GridLayout>(row.get()));
 
   views::ColumnSet* columns = layout->AddColumnSet(0);
   // A column for the section name.
@@ -211,8 +212,8 @@ std::unique_ptr<views::View> CreateInlineCurrencyAmountItem(
     bool bold) {
   std::unique_ptr<views::View> item_amount_line =
       base::MakeUnique<views::View>();
-  views::GridLayout* item_amount_layout =
-      views::GridLayout::CreateAndInstall(item_amount_line.get());
+  views::GridLayout* item_amount_layout = item_amount_line->SetLayoutManager(
+      std::make_unique<views::GridLayout>(item_amount_line.get()));
   views::ColumnSet* item_amount_columns = item_amount_layout->AddColumnSet(0);
   item_amount_columns->AddColumn(views::GridLayout::LEADING,
                                  views::GridLayout::LEADING, 0,
@@ -412,7 +413,8 @@ base::string16 PaymentSheetViewController::GetSheetTitle() {
 }
 
 void PaymentSheetViewController::FillContentView(views::View* content_view) {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(content_view);
+  views::GridLayout* layout = content_view->SetLayoutManager(
+      std::make_unique<views::GridLayout>(content_view));
   views::ColumnSet* columns = layout->AddColumnSet(0);
   columns->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, 1,
                      views::GridLayout::USE_PREF, 0, 0);
@@ -561,8 +563,8 @@ void PaymentSheetViewController::UpdatePayButtonState(bool enabled) {
 std::unique_ptr<PaymentRequestRowView>
 PaymentSheetViewController::CreatePaymentSheetSummaryRow() {
   std::unique_ptr<views::View> inline_summary = base::MakeUnique<views::View>();
-  views::GridLayout* layout =
-      views::GridLayout::CreateAndInstall(inline_summary.get());
+  views::GridLayout* layout = inline_summary->SetLayoutManager(
+      std::make_unique<views::GridLayout>(inline_summary.get()));
   views::ColumnSet* columns = layout->AddColumnSet(0);
   columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 1,
                      views::GridLayout::USE_PREF, 0, 0);
@@ -727,8 +729,8 @@ PaymentSheetViewController::CreatePaymentMethodRow() {
   if (selected_instrument) {
     std::unique_ptr<views::View> content_view = base::MakeUnique<views::View>();
 
-    views::GridLayout* layout =
-        views::GridLayout::CreateAndInstall(content_view.get());
+    views::GridLayout* layout = content_view->SetLayoutManager(
+        std::make_unique<views::GridLayout>(content_view.get()));
     views::ColumnSet* columns = layout->AddColumnSet(0);
     columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 1,
                        views::GridLayout::USE_PREF, 0, 0);
diff --git a/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view.cc b/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view.cc
index b0a76c742048d..4fdb0dbdd5ada 100644
--- a/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view.cc
+++ b/chrome/browser/ui/views/profiles/forced_reauthentication_dialog_view.cc
@@ -209,7 +209,8 @@ void ForcedReauthenticationDialogView::AddedToWidget() {
       provider->GetDialogInsetsForContentType(views::TEXT, views::TEXT);
   SetBorder(views::CreateEmptyBorder(dialog_insets.top(), 0,
                                      dialog_insets.bottom(), 0));
-  views::GridLayout* dialog_layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* dialog_layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   SetLayoutManager(dialog_layout);
 
   // Use a column set with no padding.
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
index f2c1d96b83830..b4d83c1f63f85 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -118,7 +118,8 @@ bool IsProfileChooser(profiles::BubbleViewMode mode) {
 // Creates a GridLayout with a single column. This ensures that all the child
 // views added get auto-expanded to fill the full width of the bubble.
 views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(view);
+  views::GridLayout* layout =
+      view->SetLayoutManager(std::make_unique<views::GridLayout>(view));
 
   views::ColumnSet* columns = layout->AddColumnSet(0);
   columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
@@ -202,8 +203,8 @@ class TitleCard : public views::View {
                                          TitleCard* title_card,
                                          int width) {
     views::View* titled_view = new views::View();
-    views::GridLayout* layout =
-        views::GridLayout::CreateAndInstall(titled_view);
+    views::GridLayout* layout = titled_view->SetLayoutManager(
+        std::make_unique<views::GridLayout>(titled_view));
 
     ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
     const gfx::Insets dialog_insets =
diff --git a/chrome/browser/ui/views/proximity_auth/proximity_auth_error_bubble_view.cc b/chrome/browser/ui/views/proximity_auth/proximity_auth_error_bubble_view.cc
index 5fc2d8d3373a1..3cf136a0625ef 100644
--- a/chrome/browser/ui/views/proximity_auth/proximity_auth_error_bubble_view.cc
+++ b/chrome/browser/ui/views/proximity_auth/proximity_auth_error_bubble_view.cc
@@ -94,7 +94,8 @@ void ProximityAuthErrorBubbleView::Init() {
   // ----------------------------
   // | icon | padding | message |
   // ----------------------------
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   views::ColumnSet* columns = layout->AddColumnSet(0);
   columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 0,
                      views::GridLayout::USE_PREF, 0, 0);
diff --git a/chrome/browser/ui/views/sad_tab_view.cc b/chrome/browser/ui/views/sad_tab_view.cc
index 2bda4f600c10c..84ce6659be67a 100644
--- a/chrome/browser/ui/views/sad_tab_view.cc
+++ b/chrome/browser/ui/views/sad_tab_view.cc
@@ -52,7 +52,8 @@ SadTabView::SadTabView(content::WebContents* web_contents, SadTabKind kind)
   SetBackground(views::CreateThemedSolidBackground(
       this, ui::NativeTheme::kColorId_DialogBackground));
 
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   const int column_set_id = 0;
   views::ColumnSet* columns = layout->AddColumnSet(column_set_id);
diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.cc b/chrome/browser/ui/views/session_crashed_bubble_view.cc
index ec869c712e773..6077131b9ee5e 100644
--- a/chrome/browser/ui/views/session_crashed_bubble_view.cc
+++ b/chrome/browser/ui/views/session_crashed_bubble_view.cc
@@ -242,7 +242,8 @@ views::View* SessionCrashedBubbleView::CreateFootnoteView() {
 
   // Create a view to hold the checkbox and the text.
   views::View* uma_view = new views::View();
-  GridLayout* uma_layout = GridLayout::CreateAndInstall(uma_view);
+  GridLayout* uma_layout =
+      uma_view->SetLayoutManager(std::make_unique<views::GridLayout>(uma_view));
   uma_view->SetLayoutManager(uma_layout);
 
   const int kReportColumnSetId = 0;
diff --git a/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc b/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc
index d03fcebad0caf..6db4e6c703b40 100644
--- a/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc
+++ b/chrome/browser/ui/views/sync/one_click_signin_dialog_view.cc
@@ -88,7 +88,8 @@ OneClickSigninDialogView::~OneClickSigninDialogView() {
 }
 
 void OneClickSigninDialogView::Init() {
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // Column set for descriptive text and link.
   views::ColumnSet* cs = layout->AddColumnSet(0);
diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc
index c66055ce9d190..cefffd1ad881e 100644
--- a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc
+++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc
@@ -207,11 +207,12 @@ void ProfileSigninConfirmationDialogViews::ViewHierarchyChanged(
   // insets.
   SetBorder(views::CreateEmptyBorder(content_insets.top(), 0,
                                      content_insets.bottom(), 0));
-  views::GridLayout* dialog_layout = views::GridLayout::CreateAndInstall(this);
+  views::GridLayout* dialog_layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // Use GridLayout inside the prompt bar because StyledLabel requires it.
-  views::GridLayout* prompt_layout =
-      views::GridLayout::CreateAndInstall(prompt_bar);
+  views::GridLayout* prompt_layout = prompt_bar->SetLayoutManager(
+      std::make_unique<views::GridLayout>(prompt_bar));
   prompt_bar->SetBorder(
       views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric(
           views::INSETS_DIALOG_SUBSECTION)));
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view.cc b/chrome/browser/ui/views/translate/translate_bubble_view.cc
index a40bf4392fd8a..78d39b7004eff 100644
--- a/chrome/browser/ui/views/translate/translate_bubble_view.cc
+++ b/chrome/browser/ui/views/translate/translate_bubble_view.cc
@@ -570,7 +570,8 @@ views::View* TranslateBubbleView::CreateViewBeforeTranslate() {
   }
 
   views::View* view = new views::View();
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(view);
+  views::GridLayout* layout =
+      view->SetLayoutManager(std::make_unique<views::GridLayout>(view));
 
   using views::GridLayout;
 
@@ -675,7 +676,8 @@ views::View* TranslateBubbleView::CreateViewTranslating() {
       model_->GetLanguageNameAt(model_->GetTargetLanguageIndex());
 
   views::View* view = new views::View();
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(view);
+  views::GridLayout* layout =
+      view->SetLayoutManager(std::make_unique<views::GridLayout>(view));
 
   using views::GridLayout;
 
@@ -738,7 +740,8 @@ views::View* TranslateBubbleView::CreateViewTranslating() {
 
 views::View* TranslateBubbleView::CreateViewAfterTranslate() {
   views::View* view = new views::View();
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(view);
+  views::GridLayout* layout =
+      view->SetLayoutManager(std::make_unique<views::GridLayout>(view));
 
   using views::GridLayout;
 
@@ -799,7 +802,8 @@ views::View* TranslateBubbleView::CreateViewAfterTranslate() {
 
 views::View* TranslateBubbleView::CreateViewError() {
   views::View* view = new views::View();
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(view);
+  views::GridLayout* layout =
+      view->SetLayoutManager(std::make_unique<views::GridLayout>(view));
 
   using views::GridLayout;
 
@@ -894,7 +898,8 @@ views::View* TranslateBubbleView::CreateViewAdvanced() {
   }
 
   views::View* view = new views::View();
-  views::GridLayout* layout = views::GridLayout::CreateAndInstall(view);
+  views::GridLayout* layout =
+      view->SetLayoutManager(std::make_unique<views::GridLayout>(view));
 
   using views::GridLayout;
 
diff --git a/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc b/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc
index 31339785d8a16..ae1d4a9237869 100644
--- a/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc
+++ b/chrome/browser/ui/views/try_chrome_dialog_win/try_chrome_dialog.cc
@@ -1026,8 +1026,8 @@ void TryChromeDialog::OnContextInitialized() {
 
   auto contents_view = std::make_unique<ClickableView>();
   contents_view->SetBackground(views::CreateSolidBackground(kBackgroundColor));
-  views::GridLayout* layout =
-      views::GridLayout::CreateAndInstall(contents_view.get());
+  views::GridLayout* layout = contents_view->SetLayoutManager(
+      std::make_unique<views::GridLayout>(contents_view.get()));
   layout->set_minimum_size(gfx::Size(kToastWidth, 0));
   views::ColumnSet* columns;
 
diff --git a/chrome/browser/ui/views/uninstall_view.cc b/chrome/browser/ui/views/uninstall_view.cc
index 3109a75cd661f..c350b997a2fea 100644
--- a/chrome/browser/ui/views/uninstall_view.cc
+++ b/chrome/browser/ui/views/uninstall_view.cc
@@ -47,7 +47,8 @@ void UninstallView::SetupControls() {
   using views::ColumnSet;
   using views::GridLayout;
 
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // Message to confirm uninstallation.
   int column_set_id = 0;
diff --git a/content/shell/browser/shell_views.cc b/content/shell/browser/shell_views.cc
index 30b894f172090..720310f60da1a 100644
--- a/content/shell/browser/shell_views.cc
+++ b/content/shell/browser/shell_views.cc
@@ -116,7 +116,8 @@ class ShellWindowDelegateView : public views::WidgetDelegateView,
   void InitShellWindow() {
     SetBackground(views::CreateStandardPanelBackground());
 
-    views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+    views::GridLayout* layout =
+        SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
     views::ColumnSet* column_set = layout->AddColumnSet(0);
     if (!shell_->hide_toolbar())
@@ -130,8 +131,8 @@ class ShellWindowDelegateView : public views::WidgetDelegateView,
     if (!shell_->hide_toolbar()) {
       layout->AddPaddingRow(0, 2);
       layout->StartRow(0, 0);
-      views::GridLayout* toolbar_layout =
-          views::GridLayout::CreateAndInstall(toolbar_view_);
+      views::GridLayout* toolbar_layout = toolbar_view_->SetLayoutManager(
+          std::make_unique<views::GridLayout>(toolbar_view_));
 
       views::ColumnSet* toolbar_column_set =
           toolbar_layout->AddColumnSet(0);
diff --git a/mash/catalog_viewer/catalog_viewer.cc b/mash/catalog_viewer/catalog_viewer.cc
index 5a54a98cedcc0..3849e67d3dcd7 100644
--- a/mash/catalog_viewer/catalog_viewer.cc
+++ b/mash/catalog_viewer/catalog_viewer.cc
@@ -53,7 +53,8 @@ class CatalogViewerContents : public views::WidgetDelegateView,
     SetBorder(views::CreateEmptyBorder(gfx::Insets(kPadding)));
     SetBackground(views::CreateStandardPanelBackground());
 
-    views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+    views::GridLayout* layout =
+        SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
     views::ColumnSet* columns = layout->AddColumnSet(0);
     columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
diff --git a/mash/example/window_type_launcher/window_type_launcher.cc b/mash/example/window_type_launcher/window_type_launcher.cc
index 5189b0cc8e350..bcf011970a38c 100644
--- a/mash/example/window_type_launcher/window_type_launcher.cc
+++ b/mash/example/window_type_launcher/window_type_launcher.cc
@@ -275,7 +275,8 @@ class WindowTypeLauncherView : public views::WidgetDelegateView,
             MdTextButton::Create(this, base::ASCIIToUTF16("Jank for (s):"))),
         jank_duration_field_(new views::Textfield) {
     SetBorder(views::CreateEmptyBorder(gfx::Insets(5)));
-    views::GridLayout* layout = views::GridLayout::CreateAndInstall(this);
+    views::GridLayout* layout =
+        SetLayoutManager(std::make_unique<views::GridLayout>(this));
     views::ColumnSet* column_set = layout->AddColumnSet(0);
     column_set->AddColumn(views::GridLayout::LEADING,
                           views::GridLayout::CENTER,
diff --git a/ui/app_list/views/suggestions_container_view.cc b/ui/app_list/views/suggestions_container_view.cc
index d6247527ec72c..07890ae53a7b1 100644
--- a/ui/app_list/views/suggestions_container_view.cc
+++ b/ui/app_list/views/suggestions_container_view.cc
@@ -114,7 +114,7 @@ void SuggestionsContainerView::SetFirstResultSelected(bool selected) {}
 void SuggestionsContainerView::CreateAppsGrid(int apps_num) {
   DCHECK(search_result_tile_views_.empty());
   views::GridLayout* tiles_layout_manager =
-      views::GridLayout::CreateAndInstall(this);
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
   SetLayoutManager(tiles_layout_manager);
 
   views::ColumnSet* column_set = tiles_layout_manager->AddColumnSet(0);
diff --git a/ui/views/color_chooser/color_chooser_view.cc b/ui/views/color_chooser/color_chooser_view.cc
index 349225d8a974c..f082282683b52 100644
--- a/ui/views/color_chooser/color_chooser_view.cc
+++ b/ui/views/color_chooser/color_chooser_view.cc
@@ -377,7 +377,8 @@ ColorChooserView::ColorChooserView(ColorChooserListener* listener,
   AddChildView(container);
 
   View* container2 = new View();
-  GridLayout* layout = GridLayout::CreateAndInstall(container2);
+  GridLayout* layout = container2->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container2));
   ColumnSet* columns = layout->AddColumnSet(0);
   columns->AddColumn(
       GridLayout::LEADING, GridLayout::FILL, 0, GridLayout::USE_PREF, 0, 0);
diff --git a/ui/views/controls/message_box_view.cc b/ui/views/controls/message_box_view.cc
index 01eb1b9af1dc7..5b0a00abbe156 100644
--- a/ui/views/controls/message_box_view.cc
+++ b/ui/views/controls/message_box_view.cc
@@ -218,7 +218,8 @@ void MessageBoxView::Init(const InitParams& params) {
 
 void MessageBoxView::ResetLayoutManager() {
   // Initialize the Grid Layout Manager used for this dialog box.
-  GridLayout* layout = GridLayout::CreateAndInstall(this);
+  GridLayout* layout =
+      SetLayoutManager(std::make_unique<views::GridLayout>(this));
 
   // Add the column set for the message displayed at the top of the dialog box.
   constexpr int kMessageViewColumnSetId = 0;
diff --git a/ui/views/examples/button_sticker_sheet.cc b/ui/views/examples/button_sticker_sheet.cc
index eb8044088987e..b395387d61aa6 100644
--- a/ui/views/examples/button_sticker_sheet.cc
+++ b/ui/views/examples/button_sticker_sheet.cc
@@ -31,7 +31,8 @@ GridLayout* MakeStretchyGridLayout(View* host, int ncols) {
   const GridLayout::SizeType kColumnUsesFixedSize = GridLayout::FIXED;
   const int kColumnWidth = 96;
 
-  GridLayout* layout = GridLayout::CreateAndInstall(host);
+  GridLayout* layout =
+      host->SetLayoutManager(std::make_unique<views::GridLayout>(host));
   ColumnSet* columns = layout->AddColumnSet(kStretchyGridColumnSetId);
   for (int i = 0; i < ncols; ++i) {
     if (i != 0)
diff --git a/ui/views/examples/dialog_example.cc b/ui/views/examples/dialog_example.cc
index 3003fe3b9a001..97737f1a809e4 100644
--- a/ui/views/examples/dialog_example.cc
+++ b/ui/views/examples/dialog_example.cc
@@ -132,7 +132,8 @@ void DialogExample::CreateExampleView(View* container) {
   views::LayoutProvider* provider = views::LayoutProvider::Get();
   const int horizontal_spacing =
       provider->GetDistanceMetric(views::DISTANCE_RELATED_BUTTON_HORIZONTAL);
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
   ColumnSet* column_set = layout->AddColumnSet(kFieldsColumnId);
   column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, kFixed,
                         GridLayout::USE_PREF, 0, 0);
diff --git a/ui/views/examples/examples_window.cc b/ui/views/examples/examples_window.cc
index 6cd735bf389e0..e6b46660e7c64 100644
--- a/ui/views/examples/examples_window.cc
+++ b/ui/views/examples/examples_window.cc
@@ -143,7 +143,8 @@ class ExamplesWindowContents : public WidgetDelegateView,
     combobox_->ModelChanged();
 
     SetBackground(CreateStandardPanelBackground());
-    GridLayout* layout = GridLayout::CreateAndInstall(this);
+    GridLayout* layout =
+        SetLayoutManager(std::make_unique<views::GridLayout>(this));
     ColumnSet* column_set = layout->AddColumnSet(0);
     column_set->AddPaddingColumn(0, 5);
     column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
diff --git a/ui/views/examples/label_example.cc b/ui/views/examples/label_example.cc
index 26182c9563691..be6bbe92fa6da 100644
--- a/ui/views/examples/label_example.cc
+++ b/ui/views/examples/label_example.cc
@@ -163,7 +163,8 @@ void LabelExample::AddCustomLabel(View* container) {
   View* control_container = new View();
   control_container->SetBorder(CreateSolidBorder(2, SK_ColorGRAY));
   control_container->SetBackground(CreateSolidBackground(SK_ColorLTGRAY));
-  GridLayout* layout = GridLayout::CreateAndInstall(control_container);
+  GridLayout* layout = control_container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(control_container));
 
   ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL,
diff --git a/ui/views/examples/message_box_example.cc b/ui/views/examples/message_box_example.cc
index 3327ff9bd1b09..81463c22ff363 100644
--- a/ui/views/examples/message_box_example.cc
+++ b/ui/views/examples/message_box_example.cc
@@ -27,7 +27,8 @@ void MessageBoxExample::CreateExampleView(View* container) {
   status_ = new LabelButton(this, ASCIIToUTF16("Show Status"));
   toggle_ = new LabelButton(this, ASCIIToUTF16("Toggle Checkbox"));
 
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
 
   message_box_view_->SetCheckBoxLabel(ASCIIToUTF16("Check Box"));
 
diff --git a/ui/views/examples/multiline_example.cc b/ui/views/examples/multiline_example.cc
index 46da3ea5fd920..4e5225bd99a7e 100644
--- a/ui/views/examples/multiline_example.cc
+++ b/ui/views/examples/multiline_example.cc
@@ -159,7 +159,8 @@ void MultilineExample::CreateExampleView(View* container) {
   textfield_->set_controller(this);
   textfield_->SetText(kTestString);
 
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
 
   ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER,
diff --git a/ui/views/examples/progress_bar_example.cc b/ui/views/examples/progress_bar_example.cc
index c9d826655d47e..610ce9a11e859 100644
--- a/ui/views/examples/progress_bar_example.cc
+++ b/ui/views/examples/progress_bar_example.cc
@@ -36,7 +36,8 @@ ProgressBarExample::~ProgressBarExample() {
 }
 
 void ProgressBarExample::CreateExampleView(View* container) {
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
 
   ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
diff --git a/ui/views/examples/radio_button_example.cc b/ui/views/examples/radio_button_example.cc
index e0daa38f436f8..4f6e05b475d16 100644
--- a/ui/views/examples/radio_button_example.cc
+++ b/ui/views/examples/radio_button_example.cc
@@ -38,7 +38,8 @@ void RadioButtonExample::CreateExampleView(View* container) {
     radio_buttons_[i]->set_listener(this);
   }
 
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
 
   ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(GridLayout::FILL, GridLayout::FILL,
diff --git a/ui/views/examples/scroll_view_example.cc b/ui/views/examples/scroll_view_example.cc
index ef6ff4109d381..8dbebef953d69 100644
--- a/ui/views/examples/scroll_view_example.cc
+++ b/ui/views/examples/scroll_view_example.cc
@@ -87,7 +87,8 @@ void ScrollViewExample::CreateExampleView(View* container) {
   scrollable_->SetBounds(0, 0, 1000, 100);
   scrollable_->SetColor(SK_ColorYELLOW, SK_ColorCYAN);
 
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
 
   // Add scroll view.
   ColumnSet* column_set = layout->AddColumnSet(0);
diff --git a/ui/views/examples/tabbed_pane_example.cc b/ui/views/examples/tabbed_pane_example.cc
index 2623c10b3a0d4..1c1bb2f5d0aeb 100644
--- a/ui/views/examples/tabbed_pane_example.cc
+++ b/ui/views/examples/tabbed_pane_example.cc
@@ -27,7 +27,8 @@ void TabbedPaneExample::CreateExampleView(View* container) {
   add_at_ = new LabelButton(this, ASCIIToUTF16("Add At 1"));
   select_at_ = new LabelButton(this, ASCIIToUTF16("Select At 1"));
 
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
 
   const int tabbed_pane_column = 0;
   ColumnSet* column_set = layout->AddColumnSet(tabbed_pane_column);
diff --git a/ui/views/examples/table_example.cc b/ui/views/examples/table_example.cc
index f3bd42624c9ed..1fd544f7d7862 100644
--- a/ui/views/examples/table_example.cc
+++ b/ui/views/examples/table_example.cc
@@ -58,7 +58,8 @@ void TableExample::CreateExampleView(View* container) {
   column4_visible_checkbox_->SetChecked(true);
   column4_visible_checkbox_->set_listener(this);
 
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
 
   std::vector<ui::TableColumn> columns;
   columns.push_back(TestTableColumn(0, "Fruit"));
diff --git a/ui/views/examples/text_example.cc b/ui/views/examples/text_example.cc
index d35e667fb357d..8b95cf23acb34 100644
--- a/ui/views/examples/text_example.cc
+++ b/ui/views/examples/text_example.cc
@@ -160,7 +160,8 @@ Combobox* TextExample::AddCombobox(GridLayout* layout,
 void TextExample::CreateExampleView(View* container) {
   text_view_ = new TextExampleView;
   text_view_->SetBorder(CreateSolidBorder(1, SK_ColorGRAY));
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
   layout->AddPaddingRow(0, 8);
 
   ColumnSet* column_set = layout->AddColumnSet(0);
diff --git a/ui/views/examples/textfield_example.cc b/ui/views/examples/textfield_example.cc
index e166ac0d7fc41..6e4c5fe3ab069 100644
--- a/ui/views/examples/textfield_example.cc
+++ b/ui/views/examples/textfield_example.cc
@@ -61,7 +61,8 @@ void TextfieldExample::CreateExampleView(View* container) {
   name_->set_controller(this);
   password_->set_controller(this);
 
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
 
   ColumnSet* column_set = layout->AddColumnSet(0);
   column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL,
diff --git a/ui/views/examples/tree_view_example.cc b/ui/views/examples/tree_view_example.cc
index 061cbefb0bd36..c6621eb391134 100644
--- a/ui/views/examples/tree_view_example.cc
+++ b/ui/views/examples/tree_view_example.cc
@@ -80,7 +80,8 @@ void TreeViewExample::CreateExampleView(View* container) {
   change_title_->SetFocusForPlatform();
   change_title_->set_request_focus_on_press(true);
 
-  GridLayout* layout = GridLayout::CreateAndInstall(container);
+  GridLayout* layout = container->SetLayoutManager(
+      std::make_unique<views::GridLayout>(container));
 
   const int tree_view_column = 0;
   ColumnSet* column_set = layout->AddColumnSet(tree_view_column);
diff --git a/ui/views/layout/grid_layout.cc b/ui/views/layout/grid_layout.cc
index 3060f64db8a6f..0f3ee7aa8b5fe 100644
--- a/ui/views/layout/grid_layout.cc
+++ b/ui/views/layout/grid_layout.cc
@@ -775,15 +775,11 @@ bool ColumnSet::CanUseMinimum(const ViewState& view_state) const {
 
 // GridLayout -------------------------------------------------------------
 
-// static
-GridLayout* GridLayout::CreateAndInstall(View* host) {
-  GridLayout* result = new GridLayout(host);
-  host->SetLayoutManager(result);
-  return result;
+GridLayout::GridLayout(View* host) : host_(host) {
+  DCHECK(host);
 }
 
-GridLayout::~GridLayout() {
-}
+GridLayout::~GridLayout() {}
 
 ColumnSet* GridLayout::AddColumnSet(int id) {
   DCHECK(GetColumnSet(id) == nullptr);
@@ -939,17 +935,6 @@ int GridLayout::GetPreferredHeightForWidth(const View* host, int width) const {
   return pref.height();
 }
 
-GridLayout::GridLayout(View* host)
-    : host_(host),
-      calculated_master_columns_(false),
-      remaining_row_span_(0),
-      current_row_(-1),
-      next_column_(0),
-      current_row_col_set_(nullptr),
-      adding_view_(false) {
-  DCHECK(host);
-}
-
 void GridLayout::SizeRowsAndColumns(bool layout, int width, int height,
                                     gfx::Size* pref) const {
   // Protect against clients asking for metrics during the addition of a View.
diff --git a/ui/views/layout/grid_layout.h b/ui/views/layout/grid_layout.h
index b50daeabb560b..4721adf215f14 100644
--- a/ui/views/layout/grid_layout.h
+++ b/ui/views/layout/grid_layout.h
@@ -107,11 +107,7 @@ class VIEWS_EXPORT GridLayout : public LayoutManager {
     USE_PREF
   };
 
-  // Creates a new GridLayout and installs it as the LayoutManager for |host|.
-  // The returned pointer is owned by the view and already installed as its
-  // layout manager.
-  static GridLayout* CreateAndInstall(View* host);
-
+  explicit GridLayout(View* host);
   ~GridLayout() override;
 
   // See class description for what this does.
@@ -192,8 +188,6 @@ class VIEWS_EXPORT GridLayout : public LayoutManager {
   void set_minimum_size(const gfx::Size& size) { minimum_size_ = size; }
 
  private:
-  explicit GridLayout(View* host);
-
   // As both Layout and GetPreferredSize need to do nearly the same thing,
   // they both call into this method. This sizes the Columns/Rows as
   // appropriate. If layout is true, width/height give the width/height the
@@ -234,23 +228,23 @@ class VIEWS_EXPORT GridLayout : public LayoutManager {
   View* const host_;
 
   // Whether or not we've calculated the master/linked columns.
-  mutable bool calculated_master_columns_;
+  mutable bool calculated_master_columns_ = false;
 
   // Used to verify a view isn't added with a row span that expands into
   // another column structure.
-  int remaining_row_span_;
+  int remaining_row_span_ = 0;
 
   // Current row.
-  int current_row_;
+  int current_row_ = -1;
 
   // Current column.
-  int next_column_;
+  int next_column_ = 0;
 
   // Column set for the current row. This is null for padding rows.
-  ColumnSet* current_row_col_set_;
+  ColumnSet* current_row_col_set_ = nullptr;
 
   // Set to true when adding a View.
-  bool adding_view_;
+  bool adding_view_ = false;
 
   // ViewStates. This is ordered by row_span in ascending order.
   mutable std::vector<std::unique_ptr<ViewState>> view_states_;
diff --git a/ui/views/layout/grid_layout_unittest.cc b/ui/views/layout/grid_layout_unittest.cc
index f993c6fc7d8f8..c5c3242d06526 100644
--- a/ui/views/layout/grid_layout_unittest.cc
+++ b/ui/views/layout/grid_layout_unittest.cc
@@ -99,7 +99,10 @@ class FlexibleView : public View {
 
 class GridLayoutTest : public testing::Test {
  public:
-  GridLayoutTest() : layout_(GridLayout::CreateAndInstall(&host_)) {}
+  GridLayoutTest() {
+    layout_ =
+        host_.SetLayoutManager(std::make_unique<views::GridLayout>(&host_));
+  }
 
   void RemoveAll() {
     for (int i = host_.child_count() - 1; i >= 0; i--)
@@ -118,7 +121,9 @@ class GridLayoutTest : public testing::Test {
 
 class GridLayoutAlignmentTest : public testing::Test {
  public:
-  GridLayoutAlignmentTest() : layout_(GridLayout::CreateAndInstall(&host_)) {
+  GridLayoutAlignmentTest() {
+    layout_ =
+        host_.SetLayoutManager(std::make_unique<views::GridLayout>(&host_));
     v1_.SetPreferredSize(gfx::Size(10, 20));
   }
 
diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc
index a2f8feb6440d7..6b673090242fd 100644
--- a/ui/views/window/dialog_client_view.cc
+++ b/ui/views/window/dialog_client_view.cc
@@ -342,7 +342,8 @@ void DialogClientView::SetupLayout() {
 
   // Clobber any existing LayoutManager since it has weak references to child
   // Views which may be removed by SetupViews().
-  GridLayout* layout = GridLayout::CreateAndInstall(button_row_container_);
+  GridLayout* layout = button_row_container_->SetLayoutManager(
+      std::make_unique<views::GridLayout>(button_row_container_));
   layout->set_minimum_size(minimum_size_);
 
   SetupViews();