Refactor Browser::Type

Change from {TABBED, POPUP}, to {NORMAL, POPUP, APP, DEVTOOLS}

Browser::is_type_tabbed() => Browser::is_type_normal()
Browser::is_type_popup() (used to include POPUP, APP, DEVTOOLS)
split into:
 * Browser::is_type_popup()
 * Browser::is_type_app()
 * Browser::is_type_devtools()

Browser::is_app() => Browser::deprecated_is_app() (APP or DEVTOOLS)
and also split into:
 * Browser::is_type_app()
 * Browser::is_type_devtools()

This is quite a large change, but there is hopefully no or very
little change to any logic.  To help reviewers, I have uploaded
10 different patchsets which each perform a small refactoring change
that make up this CL.

Patchset 12: s/TYPE_TABBED/TYPE_NORMAL/
Patchset 13: s/kMatchTabbed/kMatchNormal/
Patchset 14: s/is_type_tabbed/is_type_normal/
Patchset 15: s/is_devtools/is_type_devtools/
Patchset 16: s/is_app/deprecated_is_app/
Patchset 17: s/is_type_popup/!is_type_normal/
Patchset 18: Add TYPE_APP and TYPE_DEVTOOLS (main change)
Patchset 19: SyncedWindowDelegate
Patchset 20: little fixes, git cl format
Patchset 21: Fix types in tests

Patchset 18 is the only one that has any change to non-test
code which is not a pure refactor.

Bug: 990158
Change-Id: I8ade3205ff86fb974f1997daf06f237fdd541e45
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1741434
Commit-Queue: Joel Hockey <[email protected]>
Reviewed-by: Scott Violet <[email protected]>
Reviewed-by: Dana Fried <[email protected]>
Reviewed-by: Elly Fong-Jones <[email protected]>
Cr-Commit-Position: refs/heads/master@{#687078}
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index ffc67b06..04fd504d 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -601,7 +601,7 @@
   if (!browser)
     return;
 
-  if (browser->is_type_tabbed()) {
+  if (browser->is_type_normal()) {
     tabMenuBridge_ = std::make_unique<TabMenuBridge>(
         browser->tab_strip_model(),
         [[NSApp mainMenu] itemWithTag:IDC_TAB_MENU]);
@@ -1182,7 +1182,7 @@
     for (auto* browser : *BrowserList::GetInstance()) {
       // When focusing Chrome, don't focus any browser windows associated with
       // a currently running app shim, so ignore them.
-      if (browser && browser->is_app()) {
+      if (browser && browser->deprecated_is_app()) {
         extensions::ExtensionRegistry* registry =
             extensions::ExtensionRegistry::Get(browser->profile());
         const extensions::Extension* extension = registry->GetExtensionById(
@@ -1630,7 +1630,7 @@
       window = mainWindow;
     }
     Browser* browser = chrome::FindBrowserWithWindow(window);
-    enableCloseTabShortcut = browser && browser->is_type_tabbed();
+    enableCloseTabShortcut = browser && browser->is_type_normal();
   }
 
   [self adjustCloseWindowMenuItemKeyEquivalent:enableCloseTabShortcut];
diff --git a/chrome/browser/apps/app_shim/extension_app_shim_handler_mac.cc b/chrome/browser/apps/app_shim/extension_app_shim_handler_mac.cc
index 17b536d9..1f5a868 100644
--- a/chrome/browser/apps/app_shim/extension_app_shim_handler_mac.cc
+++ b/chrome/browser/apps/app_shim/extension_app_shim_handler_mac.cc
@@ -459,7 +459,7 @@
 // static
 const Extension* ExtensionAppShimHandler::MaybeGetAppForBrowser(
     Browser* browser) {
-  if (!browser || !browser->is_app())
+  if (!browser || !browser->deprecated_is_app())
     return NULL;
 
   return MaybeGetAppExtension(
diff --git a/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc b/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc
index 358cc7b..c214807 100644
--- a/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc
+++ b/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc
@@ -272,7 +272,7 @@
   // are already in an app browser. The former can happen if an initial
   // navigation is reparented into a new app browser instance.
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
-  if (!browser || browser->is_app())
+  if (!browser || browser->deprecated_is_app())
     return false;
 
   return true;
diff --git a/chrome/browser/chromeos/chrome_content_browser_client_chromeos_part.cc b/chrome/browser/chromeos/chrome_content_browser_client_chromeos_part.cc
index ed2903e..8ff38bc 100644
--- a/chrome/browser/chromeos/chrome_content_browser_client_chromeos_part.cc
+++ b/chrome/browser/chromeos/chrome_content_browser_client_chromeos_part.cc
@@ -79,7 +79,7 @@
   // Do this only for webcontents displayed in browsers and are not of hosted
   // apps.
   auto* browser = chrome::FindBrowserWithWebContents(contents);
-  if (!browser || browser->is_app())
+  if (!browser || browser->deprecated_is_app())
     return;
 
   // Also exclude internal pages and NTPs.
diff --git a/chrome/browser/chromeos/first_run/goodies_displayer.cc b/chrome/browser/chromeos/first_run/goodies_displayer.cc
index 53fe7d1f..49249cd 100644
--- a/chrome/browser/chromeos/first_run/goodies_displayer.cc
+++ b/chrome/browser/chromeos/first_run/goodies_displayer.cc
@@ -111,7 +111,7 @@
 // removes itself from BrowserListObservers, and deletes itself.
 void GoodiesDisplayer::OnBrowserSetLastActive(Browser* browser) {
   // 1. Must be an actual tabbed browser window.
-  if (browser->type() != Browser::TYPE_TABBED)
+  if (!browser->is_type_normal())
     return;
 
   // 2. Not guest or incognito session or supervised user (keep observing).
diff --git a/chrome/browser/chromeos/ui/idle_app_name_notification_view_unittest.cc b/chrome/browser/chromeos/ui/idle_app_name_notification_view_unittest.cc
index 3ea6be2..b171b63 100644
--- a/chrome/browser/chromeos/ui/idle_app_name_notification_view_unittest.cc
+++ b/chrome/browser/chromeos/ui/idle_app_name_notification_view_unittest.cc
@@ -23,7 +23,7 @@
 class IdleAppNameNotificationViewTest : public BrowserWithTestWindowTest {
  public:
   IdleAppNameNotificationViewTest()
-      : BrowserWithTestWindowTest(Browser::TYPE_TABBED) {}
+      : BrowserWithTestWindowTest(Browser::TYPE_NORMAL) {}
 
   ~IdleAppNameNotificationViewTest() override {}
 
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc
index 3dbd95ca..eda2392d 100644
--- a/chrome/browser/devtools/devtools_window.cc
+++ b/chrome/browser/devtools/devtools_window.cc
@@ -600,7 +600,7 @@
     Browser* browser,
     const DevToolsToggleAction& action) {
   if (action.type() == DevToolsToggleAction::kToggle &&
-      browser->is_devtools()) {
+      browser->is_type_devtools()) {
     browser->tab_strip_model()->CloseAllTabs();
     return;
   }
@@ -888,7 +888,7 @@
 // static
 bool DevToolsWindow::HasFiredBeforeUnloadEventForDevToolsBrowser(
     Browser* browser) {
-  DCHECK(browser->is_devtools());
+  DCHECK(browser->is_type_devtools());
   // When FastUnloadController is used, devtools frontend will be detached
   // from the browser window at this point which means we've already fired
   // beforeunload.
@@ -1006,9 +1006,9 @@
     // Check for a place to dock.
     Browser* browser = nullptr;
     int tab;
-    if (!FindInspectedBrowserAndTabIndex(inspected_web_contents,
-                                         &browser, &tab) ||
-        browser->is_type_popup()) {
+    if (!FindInspectedBrowserAndTabIndex(inspected_web_contents, &browser,
+                                         &tab) ||
+        !browser->is_type_normal()) {
       can_dock = false;
     }
   }
diff --git a/chrome/browser/download/download_crx_util.cc b/chrome/browser/download/download_crx_util.cc
index c51adb0..00bb3945 100644
--- a/chrome/browser/download/download_crx_util.cc
+++ b/chrome/browser/download/download_crx_util.cc
@@ -55,7 +55,7 @@
       Browser* browser = chrome::FindLastActiveWithProfile(profile);
       if (!browser) {
         browser = new Browser(
-            Browser::CreateParams(Browser::TYPE_TABBED, profile, true));
+            Browser::CreateParams(Browser::TYPE_NORMAL, profile, true));
       }
       web_contents = browser->tab_strip_model()->GetActiveWebContents();
     }
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc
index 19e460c..c10602f 100644
--- a/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc
+++ b/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc
@@ -55,7 +55,7 @@
 
     browser_window_ = std::make_unique<TestBrowserWindow>();
     Browser::CreateParams params(profile(), true);
-    params.type = Browser::TYPE_TABBED;
+    params.type = Browser::TYPE_NORMAL;
     params.window = browser_window_.get();
     browser_ = std::make_unique<Browser>(params);
 
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
index 60bb1f43..3699a97f 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
@@ -1821,7 +1821,7 @@
   // ... but some pages (popups and apps) don't have tabs, and some (background
   // pages) don't have an associated browser. For these, the inspector opens in
   // a new window, and our work is done.
-  if (!browser || !browser->is_type_tabbed())
+  if (!browser || !browser->is_type_normal())
     return RespondNow(NoArguments());
 
   TabStripModel* tab_strip = browser->tab_strip_model();
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
index 91bb48ea2..7dc5b23f 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
@@ -359,7 +359,7 @@
 
   browser_window_.reset(new TestBrowserWindow());
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = browser_window_.get();
   browser_.reset(new Browser(params));
 
diff --git a/chrome/browser/extensions/api/management/management_api_unittest.cc b/chrome/browser/extensions/api/management/management_api_unittest.cc
index aa72733..5f753cc 100644
--- a/chrome/browser/extensions/api/management/management_api_unittest.cc
+++ b/chrome/browser/extensions/api/management/management_api_unittest.cc
@@ -98,7 +98,7 @@
 
   browser_window_.reset(new TestBrowserWindow());
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = browser_window_.get();
   browser_.reset(new Browser(params));
 }
diff --git a/chrome/browser/extensions/api/management/management_apitest.cc b/chrome/browser/extensions/api/management/management_apitest.cc
index fbe8bb8..bbc3cb9f 100644
--- a/chrome/browser/extensions/api/management/management_apitest.cc
+++ b/chrome/browser/extensions/api/management/management_apitest.cc
@@ -399,8 +399,7 @@
   // Find the app's browser.  Check that it is a popup.
   ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile()));
   Browser* app_browser = FindOtherBrowser(browser());
-  ASSERT_TRUE(app_browser->is_type_popup());
-  ASSERT_TRUE(app_browser->is_app());
+  ASSERT_TRUE(app_browser->is_type_app());
 
   // Close the app panel.
   CloseBrowserSynchronously(app_browser);
@@ -430,8 +429,7 @@
   // prefs, so we should still see the launch in a popup.
   ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile()));
   app_browser = FindOtherBrowser(browser());
-  ASSERT_TRUE(app_browser->is_type_popup());
-  ASSERT_TRUE(app_browser->is_app());
+  ASSERT_TRUE(app_browser->is_type_app());
 }
 
 // Disabled: crbug.com/230165, crbug.com/915339, crbug.com/979399
@@ -487,7 +485,7 @@
   // a new browser.
   ASSERT_EQ(2u, chrome::GetBrowserCount(browser()->profile()));
   Browser* app_browser = FindOtherBrowser(browser());
-  ASSERT_TRUE(app_browser->is_app());
+  ASSERT_TRUE(app_browser->is_type_app());
 }
 
 // Flaky on MacOS: crbug.com/915339
diff --git a/chrome/browser/extensions/api/permissions/permissions_api_unittest.cc b/chrome/browser/extensions/api/permissions/permissions_api_unittest.cc
index e762b4a..02fb0b0 100644
--- a/chrome/browser/extensions/api/permissions/permissions_api_unittest.cc
+++ b/chrome/browser/extensions/api/permissions/permissions_api_unittest.cc
@@ -143,7 +143,7 @@
     InitializeEmptyExtensionService();
     browser_window_.reset(new TestBrowserWindow());
     Browser::CreateParams params(profile(), true);
-    params.type = Browser::TYPE_TABBED;
+    params.type = Browser::TYPE_NORMAL;
     params.window = browser_window_.get();
     browser_.reset(new Browser(params));
   }
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc
index e9e9707..6985ff5 100644
--- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc
@@ -91,7 +91,7 @@
 
   browser_window_ = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = browser_window_.get();
   browser_ = std::make_unique<Browser>(params);
 
diff --git a/chrome/browser/extensions/api/sessions/sessions_api.cc b/chrome/browser/extensions/api/sessions/sessions_api.cc
index 7156357f..a83c242 100644
--- a/chrome/browser/extensions/api/sessions/sessions_api.cc
+++ b/chrome/browser/extensions/api/sessions/sessions_api.cc
@@ -269,7 +269,7 @@
 
   api::windows::WindowType type = api::windows::WINDOW_TYPE_NONE;
   switch (window.type) {
-    case sessions::SessionWindow::TYPE_TABBED:
+    case sessions::SessionWindow::TYPE_NORMAL:
       type = api::windows::WINDOW_TYPE_NORMAL;
       break;
     case sessions::SessionWindow::TYPE_POPUP:
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
index 6d021ad5..4eb787d 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -507,7 +507,7 @@
   if (!IsValidStateForWindowsCreateFunction(create_data))
     return RespondNow(Error(tabs_constants::kInvalidWindowStateError));
 
-  Browser::Type window_type = Browser::TYPE_TABBED;
+  Browser::Type window_type = Browser::TYPE_NORMAL;
 
   gfx::Rect window_bounds;
   bool focused = true;
@@ -531,13 +531,10 @@
     }
 
     // Initialize default window bounds according to window type.
-    if (window_type == Browser::TYPE_TABBED ||
-        window_type == Browser::TYPE_POPUP) {
-      ui::WindowShowState ignored_show_state = ui::SHOW_STATE_DEFAULT;
-      WindowSizer::GetBrowserWindowBoundsAndShowState(
-          std::string(), gfx::Rect(), nullptr, &window_bounds,
-          &ignored_show_state);
-    }
+    ui::WindowShowState ignored_show_state = ui::SHOW_STATE_DEFAULT;
+    WindowSizer::GetBrowserWindowBoundsAndShowState(std::string(), gfx::Rect(),
+                                                    nullptr, &window_bounds,
+                                                    &ignored_show_state);
 
     // Any part of the bounds can optionally be set by the caller.
     if (create_data->left)
@@ -611,8 +608,7 @@
   WebContents* contents = NULL;
   // Move the tab into the created window only if it's an empty popup or it's
   // a tabbed window.
-  if ((window_type == Browser::TYPE_POPUP && urls.empty()) ||
-      window_type == Browser::TYPE_TABBED) {
+  if (window_type == Browser::TYPE_NORMAL || urls.empty()) {
     if (source_tab_strip) {
       std::unique_ptr<content::WebContents> detached_tab =
           source_tab_strip->DetachWebContentsAt(tab_index);
@@ -624,7 +620,7 @@
   }
   // Create a new tab if the created window is still empty. Don't create a new
   // tab when it is intended to create an empty popup.
-  if (!contents && urls.empty() && window_type != Browser::TYPE_POPUP) {
+  if (!contents && urls.empty() && window_type == Browser::TYPE_NORMAL) {
     chrome::NewTab(new_window);
   }
   chrome::SelectNumberedTab(new_window, 0, {TabStripModel::GestureType::kNone});
@@ -1467,7 +1463,9 @@
       return false;
     }
 
-    if (!target_browser->is_type_tabbed()) {
+    // TODO(crbug.com/990158): Rather than calling is_type_normal(), should
+    // this call SupportsWindowFeature(Browser::FEATURE_TABSTRIP)?
+    if (!target_browser->is_type_normal()) {
       *error = tabs_constants::kCanOnlyMoveTabsWithinNormalWindowsError;
       return false;
     }
diff --git a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc
index 60915b4..8b18539 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc
@@ -106,7 +106,7 @@
 
   browser_window_.reset(new TestBrowserWindow());
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = browser_window_.get();
   browser_.reset(new Browser(params));
   scoped_screen_override_ =
diff --git a/chrome/browser/extensions/browser_extension_window_controller.cc b/chrome/browser/extensions/browser_extension_window_controller.cc
index c1864e8..c2273f19 100644
--- a/chrome/browser/extensions/browser_extension_window_controller.cc
+++ b/chrome/browser/extensions/browser_extension_window_controller.cc
@@ -66,7 +66,7 @@
   if (extension->is_platform_app())
     return false;
 
-  return !browser_->is_devtools() || allow_dev_tools_windows;
+  return !browser_->is_type_devtools() || allow_dev_tools_windows;
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
index f880af7..8e49bb949 100644
--- a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
+++ b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
@@ -712,7 +712,7 @@
 
     std::unique_ptr<BrowserWindow> off_the_record_window(CreateBrowserWindow());
     std::unique_ptr<Browser> off_the_record_browser(
-        CreateBrowser(off_the_record_profile, Browser::TYPE_TABBED, false,
+        CreateBrowser(off_the_record_profile, Browser::TYPE_NORMAL, false,
                       off_the_record_window.get()));
 
     // The bubble shouldn't want to show for an incognito version of the same
diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc
index 18b81d0..9481ea96e 100644
--- a/chrome/browser/extensions/extension_tab_util.cc
+++ b/chrome/browser/extensions/extension_tab_util.cc
@@ -87,7 +87,7 @@
                        int window_id,
                        bool user_gesture,
                        std::string* error) {
-  Browser::CreateParams params(Browser::TYPE_TABBED, profile, user_gesture);
+  Browser::CreateParams params(Browser::TYPE_NORMAL, profile, user_gesture);
   Browser* browser = Browser::Create(params);
   if (!browser) {
     *error = tabs_constants::kBrowserWindowNotAllowed;
@@ -150,8 +150,8 @@
       return nullptr;
   }
 
-  // Ensure the selected browser is tabbed.
-  if (!browser->is_type_tabbed() && browser->IsAttemptingToCloseBrowser())
+  // Ensure the selected browser is normal.
+  if (!browser->is_type_normal() && browser->IsAttemptingToCloseBrowser())
     browser = chrome::FindTabbedBrowser(
         profile, function->include_incognito_information());
   if (!browser || !browser->window()) {
@@ -225,7 +225,7 @@
     browser = chrome::FindTabbedBrowser(profile, false);
     if (!browser) {
       Browser::CreateParams params =
-          Browser::CreateParams(Browser::TYPE_TABBED, profile, user_gesture);
+          Browser::CreateParams(Browser::TYPE_NORMAL, profile, user_gesture);
       browser = Browser::Create(params);
       if (!browser) {
         *error = tabs_constants::kBrowserWindowNotAllowed;
@@ -334,16 +334,13 @@
 
 // static
 std::string ExtensionTabUtil::GetBrowserWindowTypeText(const Browser& browser) {
-  if (browser.is_devtools())
+  if (browser.is_type_devtools())
     return tabs_constants::kWindowTypeValueDevTools;
-  if (browser.is_type_popup())
+  // TODO(crbug.com/990158): We return 'popup' for both popup and app since
+  // chrome.tabs.create({type: 'popup'}) uses
+  // Browser::CreateParams::CreateForApp.
+  if (browser.is_type_popup() || browser.is_type_app())
     return tabs_constants::kWindowTypeValuePopup;
-  // TODO(devlin): Browser::is_app() returns true whenever Browser::app_name_
-  // is non-empty (and includes instances such as devtools). Platform apps
-  // should no longer be returned here; are there any other cases (that aren't
-  // captured by is_devtools() or is_type_popup() for an app-type browser?
-  if (browser.is_app())
-    return tabs_constants::kWindowTypeValueApp;
   return tabs_constants::kWindowTypeValueNormal;
 }
 
@@ -779,7 +776,7 @@
 
 // static
 bool ExtensionTabUtil::BrowserSupportsTabs(Browser* browser) {
-  return browser && !browser->is_devtools();
+  return browser && !browser->is_type_devtools();
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/tab_helper.cc b/chrome/browser/extensions/tab_helper.cc
index 430eeb1..4c0296d 100644
--- a/chrome/browser/extensions/tab_helper.cc
+++ b/chrome/browser/extensions/tab_helper.cc
@@ -181,7 +181,7 @@
   const ExtensionSet& enabled_extensions = registry->enabled_extensions();
 
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
-  if (browser && browser->is_app()) {
+  if (browser && browser->deprecated_is_app()) {
     const Extension* extension = registry->GetExtensionById(
         web_app::GetAppIdFromApplicationName(browser->app_name()),
         ExtensionRegistry::EVERYTHING);
diff --git a/chrome/browser/extensions/window_open_apitest.cc b/chrome/browser/extensions/window_open_apitest.cc
index 3a9c4441..340fea0 100644
--- a/chrome/browser/extensions/window_open_apitest.cc
+++ b/chrome/browser/extensions/window_open_apitest.cc
@@ -76,15 +76,16 @@
   EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
 }
 
-bool WaitForTabsAndPopups(Browser* browser,
-                          int num_tabs,
-                          int num_popups) {
+bool WaitForTabsPopupsApps(Browser* browser,
+                           int num_tabs,
+                           int num_popups,
+                           int num_apps) {
   SCOPED_TRACE(
-      base::StringPrintf("WaitForTabsAndPopups tabs:%d, popups:%d",
-                         num_tabs, num_popups));
+      base::StringPrintf("WaitForTabsPopupsApps tabs:%d, popups:%d, apps:%d",
+                         num_tabs, num_popups, num_apps));
   // We start with one tab and one browser already open.
   ++num_tabs;
-  size_t num_browsers = static_cast<size_t>(num_popups) + 1;
+  size_t num_browsers = static_cast<size_t>(num_popups + num_apps) + 1;
 
   const base::TimeDelta kWaitTime = base::TimeDelta::FromSeconds(10);
   base::TimeTicks end_time = base::TimeTicks::Now() + kWaitTime;
@@ -100,18 +101,23 @@
   EXPECT_EQ(num_tabs, browser->tab_strip_model()->count());
 
   int num_popups_seen = 0;
+  int num_apps_seen = 0;
   for (auto* b : *BrowserList::GetInstance()) {
     if (b == browser)
       continue;
 
-    EXPECT_TRUE(b->is_type_popup());
-    ++num_popups_seen;
+    EXPECT_TRUE(b->is_type_popup() || b->is_type_app());
+    if (b->is_type_popup())
+      ++num_popups_seen;
+    else if (b->is_type_app())
+      ++num_apps_seen;
   }
   EXPECT_EQ(num_popups, num_popups_seen);
+  EXPECT_EQ(num_apps, num_apps_seen);
 
   return ((num_browsers == chrome::GetBrowserCount(browser->profile())) &&
           (num_tabs == browser->tab_strip_model()->count()) &&
-          (num_popups == num_popups_seen));
+          (num_popups == num_popups_seen) && (num_apps == num_apps_seen));
 }
 
 IN_PROC_BROWSER_TEST_F(WindowOpenApiTest, BrowserIsApp) {
@@ -119,13 +125,13 @@
   ASSERT_TRUE(LoadExtension(
       test_data_dir_.AppendASCII("window_open").AppendASCII("browser_is_app")));
 
-  EXPECT_TRUE(WaitForTabsAndPopups(browser(), 0, 2));
+  EXPECT_TRUE(WaitForTabsPopupsApps(browser(), 0, 0, 2));
 
   for (auto* b : *BrowserList::GetInstance()) {
     if (b == browser())
-      ASSERT_FALSE(b->is_app());
+      ASSERT_FALSE(b->is_type_app());
     else
-      ASSERT_TRUE(b->is_app());
+      ASSERT_TRUE(b->is_type_app());
   }
 }
 
@@ -134,9 +140,7 @@
   ASSERT_TRUE(LoadExtension(
       test_data_dir_.AppendASCII("window_open").AppendASCII("popup")));
 
-  const int num_tabs = 1;
-  const int num_popups = 0;
-  EXPECT_TRUE(WaitForTabsAndPopups(browser(), num_tabs, num_popups));
+  EXPECT_TRUE(WaitForTabsPopupsApps(browser(), 1, 0, 0));
 }
 
 IN_PROC_BROWSER_TEST_F(WindowOpenApiTest, WindowOpenPopupIframe) {
@@ -147,9 +151,7 @@
   ASSERT_TRUE(LoadExtension(
       test_data_dir_.AppendASCII("window_open").AppendASCII("popup_iframe")));
 
-  const int num_tabs = 1;
-  const int num_popups = 0;
-  EXPECT_TRUE(WaitForTabsAndPopups(browser(), num_tabs, num_popups));
+  EXPECT_TRUE(WaitForTabsPopupsApps(browser(), 1, 0, 0));
 }
 
 IN_PROC_BROWSER_TEST_F(WindowOpenApiTest, WindowOpenPopupLarge) {
@@ -158,9 +160,7 @@
       test_data_dir_.AppendASCII("window_open").AppendASCII("popup_large")));
 
   // On other systems this should open a new popup window.
-  const int num_tabs = 0;
-  const int num_popups = 1;
-  EXPECT_TRUE(WaitForTabsAndPopups(browser(), num_tabs, num_popups));
+  EXPECT_TRUE(WaitForTabsPopupsApps(browser(), 0, 0, 1));
 }
 
 IN_PROC_BROWSER_TEST_F(WindowOpenApiTest, WindowOpenPopupSmall) {
@@ -170,9 +170,7 @@
 
   // On ChromeOS this should open a new panel (acts like a new popup window).
   // On other systems this should open a new popup window.
-  const int num_tabs = 0;
-  const int num_popups = 1;
-  EXPECT_TRUE(WaitForTabsAndPopups(browser(), num_tabs, num_popups));
+  EXPECT_TRUE(WaitForTabsPopupsApps(browser(), 0, 0, 1));
 }
 
 // Disabled on Windows. Often times out or fails: crbug.com/177530
@@ -188,7 +186,7 @@
       test_data_dir_.AppendASCII("window_open").AppendASCII("popup_blocking")
       .AppendASCII("extension")));
 
-  EXPECT_TRUE(WaitForTabsAndPopups(browser(), 5, 3));
+  EXPECT_TRUE(WaitForTabsPopupsApps(browser(), 5, 2, 1));
 }
 
 IN_PROC_BROWSER_TEST_F(WindowOpenApiTest, PopupBlockingHostedApp) {
@@ -221,7 +219,7 @@
                                    WindowOpenDisposition::NEW_FOREGROUND_TAB,
                                    ui::PAGE_TRANSITION_TYPED, false));
 
-  EXPECT_TRUE(WaitForTabsAndPopups(browser(), 3, 1));
+  EXPECT_TRUE(WaitForTabsPopupsApps(browser(), 3, 1, 0));
 }
 
 IN_PROC_BROWSER_TEST_F(WindowOpenApiTest, WindowArgumentsOverflow) {
@@ -242,7 +240,7 @@
 // chrome.windows.create match the creation parameters. See crbug.com/173831.
 IN_PROC_BROWSER_TEST_F(WindowOpenApiTest, MAYBE_WindowOpenSized) {
   ASSERT_TRUE(RunExtensionTest("window_open/window_size")) << message_;
-  EXPECT_TRUE(WaitForTabsAndPopups(browser(), 0, 1));
+  EXPECT_TRUE(WaitForTabsPopupsApps(browser(), 0, 0, 1));
 }
 
 // Tests that an extension page can call window.open to an extension URL and
diff --git a/chrome/browser/feedback/feedback_dialog_utils.cc b/chrome/browser/feedback/feedback_dialog_utils.cc
index 556ddf30..903f948 100644
--- a/chrome/browser/feedback/feedback_dialog_utils.cc
+++ b/chrome/browser/feedback/feedback_dialog_utils.cc
@@ -33,7 +33,7 @@
     content::WebContents* target_tab =
         browser->tab_strip_model()->GetWebContentsAt(index);
     if (target_tab) {
-      if (browser->is_devtools()) {
+      if (browser->is_type_devtools()) {
         if (auto* dev_tools_window =
                 DevToolsWindow::AsDevToolsWindow(target_tab)) {
           target_tab = dev_tools_window->GetInspectedWebContents();
diff --git a/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc b/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc
index 3724b6b..9e665424 100644
--- a/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc
+++ b/chrome/browser/metrics/perf/windowed_incognito_observer_unittest.cc
@@ -67,7 +67,7 @@
     Profile* browser_profile =
         incognito ? profile_->GetOffTheRecordProfile() : profile_.get();
     Browser::CreateParams params(browser_profile, true);
-    params.type = Browser::TYPE_TABBED;
+    params.type = Browser::TYPE_NORMAL;
     params.window = browser_window.get();
     auto browser = std::make_unique<Browser>(params);
 
diff --git a/chrome/browser/profile_resetter/profile_resetter.cc b/chrome/browser/profile_resetter/profile_resetter.cc
index 1a80299..7106c4f 100644
--- a/chrome/browser/profile_resetter/profile_resetter.cc
+++ b/chrome/browser/profile_resetter/profile_resetter.cc
@@ -312,7 +312,7 @@
 void ProfileResetter::ResetPinnedTabs() {
   // Unpin all the tabs.
   for (auto* browser : *BrowserList::GetInstance()) {
-    if (browser->is_type_tabbed() && browser->profile() == profile_) {
+    if (browser->is_type_normal() && browser->profile() == profile_) {
       TabStripModel* tab_model = browser->tab_strip_model();
       // Here we assume that indexof(any mini tab) < indexof(any normal tab).
       // If we unpin the tab, it can be moved to the right. Thus traversing in
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
index 3326cbc..c30c062 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -1147,7 +1147,7 @@
 void RenderViewContextMenu::AppendLinkItems() {
   if (!params_.link_url.is_empty()) {
     const Browser* browser = GetBrowser();
-    const bool in_app = browser && browser->is_app();
+    const bool in_app = browser && browser->deprecated_is_app();
     WebContents* active_web_contents =
         browser ? browser->tab_strip_model()->GetActiveWebContents() : nullptr;
 
diff --git a/chrome/browser/resource_coordinator/tab_manager_stats_collector_unittest.cc b/chrome/browser/resource_coordinator/tab_manager_stats_collector_unittest.cc
index d969acb..d7d999d 100644
--- a/chrome/browser/resource_coordinator/tab_manager_stats_collector_unittest.cc
+++ b/chrome/browser/resource_coordinator/tab_manager_stats_collector_unittest.cc
@@ -629,7 +629,7 @@
   // tab strip in order to be tracked by the TabManager.
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
diff --git a/chrome/browser/resource_coordinator/tab_manager_unittest.cc b/chrome/browser/resource_coordinator/tab_manager_unittest.cc
index 3a7dd95..f55b10d1 100644
--- a/chrome/browser/resource_coordinator/tab_manager_unittest.cc
+++ b/chrome/browser/resource_coordinator/tab_manager_unittest.cc
@@ -433,7 +433,7 @@
   // its active tab.
   auto window1 = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params1(profile(), true);
-  params1.type = Browser::TYPE_TABBED;
+  params1.type = Browser::TYPE_NORMAL;
   params1.window = window1.get();
   auto browser1 = std::make_unique<Browser>(params1);
   TabStripModel* tab_strip1 = browser1->tab_strip_model();
@@ -444,7 +444,7 @@
 
   auto window2 = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params2(profile(), true);
-  params2.type = Browser::TYPE_TABBED;
+  params2.type = Browser::TYPE_NORMAL;
   params2.window = window2.get();
   auto browser2 = std::make_unique<Browser>(params1);
   TabStripModel* tab_strip2 = browser2->tab_strip_model();
@@ -1008,7 +1008,7 @@
 TEST_F(TabManagerTest, TrackingNumberOfLoadedLifecycleUnits) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1053,7 +1053,7 @@
 TEST_F(TabManagerTest, GetSortedLifecycleUnits) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1080,7 +1080,7 @@
        GetTimeInBackgroundBeforeProactiveDiscardTest) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1127,7 +1127,7 @@
        ProactiveDiscardTestLow) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1164,7 +1164,7 @@
        ProactiveDiscardTestModerate) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1200,7 +1200,7 @@
        ProactiveDiscardTestHigh) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1236,7 +1236,7 @@
        ProactiveDiscardTestExcessive) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1263,7 +1263,7 @@
        ProactiveDiscardTestChangingStates) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1364,7 +1364,7 @@
        ProactiveDiscardTestTabClosedPriorToDiscard) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1389,7 +1389,7 @@
        FreezeBackgroundTabs) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1457,7 +1457,7 @@
 TEST_F(TabManagerWithProactiveDiscardExperimentEnabledTest, FreezeOnceLoaded) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1489,7 +1489,7 @@
 
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1596,7 +1596,7 @@
 
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1639,7 +1639,7 @@
 
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1663,7 +1663,7 @@
 
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1686,7 +1686,7 @@
        NoProactiveDiscardWhenOffline) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1711,7 +1711,7 @@
        NoProactiveDiscardWhenChromeNotInUse) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1781,7 +1781,7 @@
 TEST_F(TabManagerTest, NoProactiveDiscardWhenFeatureDisabled) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
@@ -1801,7 +1801,7 @@
 TEST_F(TabManagerTest, NoFreezingWhenFeatureDisabled) {
   auto window = std::make_unique<TestBrowserWindow>();
   Browser::CreateParams params(profile(), true);
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   params.window = window.get();
   auto browser = std::make_unique<Browser>(params);
   TabStripModel* tab_strip = browser->tab_strip_model();
diff --git a/chrome/browser/resource_coordinator/tab_metrics_logger.cc b/chrome/browser/resource_coordinator/tab_metrics_logger.cc
index 7c20de5..85d4a225 100644
--- a/chrome/browser/resource_coordinator/tab_metrics_logger.cc
+++ b/chrome/browser/resource_coordinator/tab_metrics_logger.cc
@@ -235,12 +235,18 @@
 
   WindowMetricsEvent::Type window_type = WindowMetricsEvent::TYPE_UNKNOWN;
   switch (browser->type()) {
-    case Browser::TYPE_TABBED:
+    case Browser::TYPE_NORMAL:
       window_type = WindowMetricsEvent::TYPE_TABBED;
       break;
     case Browser::TYPE_POPUP:
       window_type = WindowMetricsEvent::TYPE_POPUP;
       break;
+    case Browser::TYPE_APP:
+      window_type = WindowMetricsEvent::TYPE_APP;
+      break;
+    case Browser::TYPE_DEVTOOLS:
+      window_type = WindowMetricsEvent::TYPE_APP;
+      break;
     default:
       NOTREACHED();
   }
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_navigation_util_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_navigation_util_win.cc
index 25df790..998a276 100644
--- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_navigation_util_win.cc
+++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_navigation_util_win.cc
@@ -29,7 +29,7 @@
        browser_iterator != browser_list->end_last_active();
        ++browser_iterator) {
     Browser* browser = *browser_iterator;
-    if (browser->is_type_tabbed() &&
+    if (browser->is_type_normal() &&
         (browser->window()->IsActive() || !browser->window()->IsMinimized())) {
       return browser;
     }
diff --git a/chrome/browser/sessions/session_restore.cc b/chrome/browser/sessions/session_restore.cc
index 22c9fa9..e91e93d 100644
--- a/chrome/browser/sessions/session_restore.cc
+++ b/chrome/browser/sessions/session_restore.cc
@@ -393,11 +393,11 @@
     for (auto i = windows->begin(); i != windows->end(); ++i) {
       Browser* browser = nullptr;
       if (!has_tabbed_browser &&
-          (*i)->type == sessions::SessionWindow::TYPE_TABBED)
+          (*i)->type == sessions::SessionWindow::TYPE_NORMAL)
         has_tabbed_browser = true;
       if (i == windows->begin() &&
-          (*i)->type == sessions::SessionWindow::TYPE_TABBED && browser_ &&
-          browser_->is_type_tabbed() &&
+          (*i)->type == sessions::SessionWindow::TYPE_NORMAL && browser_ &&
+          browser_->is_type_normal() &&
           !browser_->profile()->IsOffTheRecord()) {
         // The first set of tabs is added to the existing browser.
         browser = browser_;
@@ -420,14 +420,14 @@
             "SessionRestore-CreateRestoredBrowser-End", false);
 #endif
       }
-      if ((*i)->type == sessions::SessionWindow::TYPE_TABBED)
+      if ((*i)->type == sessions::SessionWindow::TYPE_NORMAL)
         last_browser = browser;
       WebContents* active_tab =
           browser->tab_strip_model()->GetActiveWebContents();
       int initial_tab_count = browser->tab_strip_model()->count();
       bool close_active_tab =
           clobber_existing_tab_ && i == windows->begin() &&
-          (*i)->type == sessions::SessionWindow::TYPE_TABBED && active_tab &&
+          (*i)->type == sessions::SessionWindow::TYPE_NORMAL && active_tab &&
           browser == browser_ && !(*i)->tabs.empty();
       if (close_active_tab)
         --initial_tab_count;
@@ -461,7 +461,7 @@
         chrome::CloseWebContents(browser, active_tab, true);
     }
 
-    if (browser_to_activate && browser_to_activate->is_type_tabbed())
+    if (browser_to_activate && browser_to_activate->is_type_normal())
       last_browser = browser_to_activate;
 
     if (last_browser && !urls_to_open_.empty())
diff --git a/chrome/browser/sessions/session_restore_browsertest.cc b/chrome/browser/sessions/session_restore_browsertest.cc
index d0b53133..f059cb2 100644
--- a/chrome/browser/sessions/session_restore_browsertest.cc
+++ b/chrome/browser/sessions/session_restore_browsertest.cc
@@ -473,8 +473,7 @@
   app_browser->window()->Maximize();
   app_browser->window()->Show();
   EXPECT_TRUE(app_browser->window()->IsMaximized());
-  EXPECT_TRUE(app_browser->is_app());
-  EXPECT_TRUE(app_browser->is_type_popup());
+  EXPECT_TRUE(app_browser->is_type_app());
 
   // Close the normal browser. After this we only have the app_browser window.
   CloseBrowserSynchronously(browser());
@@ -485,8 +484,7 @@
 
   ASSERT_TRUE(new_browser);
   EXPECT_TRUE(app_browser->window()->IsMaximized());
-  EXPECT_TRUE(app_browser->is_app());
-  EXPECT_TRUE(app_browser->is_type_popup());
+  EXPECT_TRUE(app_browser->is_type_app());
 }
 #endif  // OS_CHROMEOS
 
@@ -1683,7 +1681,7 @@
 
 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, TabWithDownloadDoesNotGetRestored) {
   ASSERT_TRUE(embedded_test_server()->Start());
-  ASSERT_EQ(Browser::TYPE_TABBED, browser()->type());
+  ASSERT_TRUE(browser()->is_type_normal());
 
   GURL first_download_url =
       embedded_test_server()->GetURL("/downloads/a_zip_file.zip");
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc
index 00875884..4acf113c 100644
--- a/chrome/browser/sessions/session_service.cc
+++ b/chrome/browser/sessions/session_service.cc
@@ -266,9 +266,8 @@
     return;
 
   RestoreIfNecessary(std::vector<GURL>(), browser);
-  SetWindowType(browser->session_id(),
-                browser->type(),
-                browser->is_app() ? TYPE_APP : TYPE_NORMAL);
+  SetWindowType(browser->session_id(), browser->type(),
+                browser->deprecated_is_app() ? TYPE_APP : TYPE_NORMAL);
   SetWindowAppName(browser->session_id(), browser->app_name());
 }
 
@@ -584,6 +583,8 @@
   BrowserList::AddObserver(this);
 }
 
+// TODO(crbug.com/990158): Remove AppType.  WindowType will be sufficient once
+// it matches Browser::Type with APP and DEVTOOLS.
 bool SessionService::ShouldRestoreWindowOfType(
     sessions::SessionWindow::WindowType window_type,
     AppType app_type) const {
@@ -594,7 +595,7 @@
     return true;
 #endif
 
-  return window_type == sessions::SessionWindow::TYPE_TABBED;
+  return window_type == sessions::SessionWindow::TYPE_NORMAL;
 }
 
 void SessionService::RemoveUnusedRestoreWindows(
@@ -922,12 +923,12 @@
   // Never track app popup windows that do not have a trusted source (i.e.
   // popup windows spawned by an app). If this logic changes, be sure to also
   // change SessionRestoreImpl::CreateRestoredBrowser().
-  if (browser->is_app() && browser->is_type_popup() &&
-      !browser->is_trusted_source()) {
+  if (browser->deprecated_is_app() && !browser->is_trusted_source()) {
     return false;
   }
-  return ShouldRestoreWindowOfType(WindowTypeForBrowserType(browser->type()),
-                                   browser->is_app() ? TYPE_APP : TYPE_NORMAL);
+  return ShouldRestoreWindowOfType(
+      WindowTypeForBrowserType(browser->type()),
+      browser->deprecated_is_app() ? TYPE_APP : TYPE_NORMAL);
 }
 
 void SessionService::MaybeDeleteSessionOnlyData() {
diff --git a/chrome/browser/sessions/session_service_unittest.cc b/chrome/browser/sessions/session_service_unittest.cc
index 01179e6..ad058e3 100644
--- a/chrome/browser/sessions/session_service_unittest.cc
+++ b/chrome/browser/sessions/session_service_unittest.cc
@@ -64,8 +64,7 @@
 
     helper_.SetService(session_service);
 
-    service()->SetWindowType(window_id,
-                             Browser::TYPE_TABBED,
+    service()->SetWindowType(window_id, Browser::TYPE_NORMAL,
                              SessionService::TYPE_NORMAL);
     service()->SetWindowBounds(window_id,
                                window_bounds,
@@ -163,8 +162,7 @@
     UpdateNavigation(window_id, tab1_id, *nav1, true);
 
     const gfx::Rect window2_bounds(3, 4, 5, 6);
-    service()->SetWindowType(window2_id,
-                             Browser::TYPE_TABBED,
+    service()->SetWindowType(window2_id, Browser::TYPE_NORMAL,
                              SessionService::TYPE_NORMAL);
     service()->SetWindowBounds(window2_id,
                                window2_bounds,
@@ -210,7 +208,7 @@
   ASSERT_EQ(0, windows[0]->selected_tab_index);
   ASSERT_EQ(window_id, windows[0]->window_id);
   ASSERT_EQ(1U, windows[0]->tabs.size());
-  ASSERT_EQ(sessions::SessionWindow::TYPE_TABBED, windows[0]->type);
+  ASSERT_EQ(sessions::SessionWindow::TYPE_NORMAL, windows[0]->type);
 
   sessions::SessionTab* tab = windows[0]->tabs[0].get();
   helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab);
@@ -373,8 +371,7 @@
   UpdateNavigation(window_id, tab1_id, nav1, true);
 
   const gfx::Rect window2_bounds(3, 4, 5, 6);
-  service()->SetWindowType(window2_id,
-                           Browser::TYPE_TABBED,
+  service()->SetWindowType(window2_id, Browser::TYPE_NORMAL,
                            SessionService::TYPE_NORMAL);
   service()->SetWindowBounds(window2_id,
                              window2_bounds,
@@ -468,8 +465,7 @@
   SessionID tab2_id = SessionID::NewUnique();
   ASSERT_NE(window2_id, window_id);
 
-  service()->SetWindowType(window2_id,
-                           Browser::TYPE_TABBED,
+  service()->SetWindowType(window2_id, Browser::TYPE_NORMAL,
                            SessionService::TYPE_NORMAL);
   service()->SetWindowBounds(window2_id,
                              window_bounds,
@@ -549,13 +545,13 @@
 TEST_F(SessionServiceTest, RemoveUnusedRestoreWindowsTest) {
   std::vector<std::unique_ptr<sessions::SessionWindow>> windows_list;
   windows_list.push_back(std::make_unique<sessions::SessionWindow>());
-  windows_list.back()->type = sessions::SessionWindow::TYPE_TABBED;
+  windows_list.back()->type = sessions::SessionWindow::TYPE_NORMAL;
   windows_list.push_back(std::make_unique<sessions::SessionWindow>());
   windows_list.back()->type = sessions::SessionWindow::TYPE_POPUP;
 
   service()->RemoveUnusedRestoreWindows(&windows_list);
   ASSERT_EQ(1U, windows_list.size());
-  EXPECT_EQ(sessions::SessionWindow::TYPE_TABBED, windows_list[0]->type);
+  EXPECT_EQ(sessions::SessionWindow::TYPE_NORMAL, windows_list[0]->type);
 }
 
 #if defined (OS_CHROMEOS)
@@ -566,8 +562,7 @@
   SessionID tab2_id = SessionID::NewUnique();
   ASSERT_NE(window2_id, window_id);
 
-  service()->SetWindowType(window2_id,
-                           Browser::TYPE_POPUP,
+  service()->SetWindowType(window2_id, Browser::TYPE_APP,
                            SessionService::TYPE_APP);
   service()->SetWindowBounds(window2_id,
                              window_bounds,
@@ -591,8 +586,8 @@
   ReadWindows(&windows, NULL);
 
   ASSERT_EQ(2U, windows.size());
-  int tabbed_index = windows[0]->type == sessions::SessionWindow::TYPE_TABBED ?
-      0 : 1;
+  int tabbed_index =
+      windows[0]->type == sessions::SessionWindow::TYPE_NORMAL ? 0 : 1;
   int app_index = tabbed_index == 0 ? 1 : 0;
   ASSERT_EQ(0, windows[tabbed_index]->selected_tab_index);
   ASSERT_EQ(window_id, windows[tabbed_index]->window_id);
@@ -618,7 +613,7 @@
   SessionID window2_id = SessionID::NewUnique();
   ASSERT_NE(window2_id, window_id);
 
-  service()->SetWindowType(window2_id, Browser::TYPE_POPUP,
+  service()->SetWindowType(window2_id, Browser::TYPE_APP,
                            SessionService::TYPE_NORMAL);
   service()->SetWindowBounds(window2_id, window_bounds, ui::SHOW_STATE_NORMAL);
   service()->SetWindowAppName(window2_id, "_crostini_fakeappid");
diff --git a/chrome/browser/sessions/session_service_utils.cc b/chrome/browser/sessions/session_service_utils.cc
index cb36b4a..9c8f8c3 100644
--- a/chrome/browser/sessions/session_service_utils.cc
+++ b/chrome/browser/sessions/session_service_utils.cc
@@ -4,26 +4,29 @@
 
 #include "chrome/browser/sessions/session_service_utils.h"
 
+// TODO(crbug.com/990158): Add mappings for Browser::Type APP and DEVTOOLS.
 sessions::SessionWindow::WindowType WindowTypeForBrowserType(
     Browser::Type type) {
   switch (type) {
+    case Browser::TYPE_NORMAL:
+      return sessions::SessionWindow::TYPE_NORMAL;
     case Browser::TYPE_POPUP:
+    case Browser::TYPE_APP:
+    case Browser::TYPE_DEVTOOLS:
       return sessions::SessionWindow::TYPE_POPUP;
-    case Browser::TYPE_TABBED:
-      return sessions::SessionWindow::TYPE_TABBED;
   }
   NOTREACHED();
-  return sessions::SessionWindow::TYPE_TABBED;
+  return sessions::SessionWindow::TYPE_NORMAL;
 }
 
 Browser::Type BrowserTypeForWindowType(
     sessions::SessionWindow::WindowType type) {
   switch (type) {
+    case sessions::SessionWindow::TYPE_NORMAL:
+      return Browser::TYPE_NORMAL;
     case sessions::SessionWindow::TYPE_POPUP:
       return Browser::TYPE_POPUP;
-    case sessions::SessionWindow::TYPE_TABBED:
-      return Browser::TYPE_TABBED;
   }
   NOTREACHED();
-  return Browser::TYPE_TABBED;
+  return Browser::TYPE_NORMAL;
 }
diff --git a/chrome/browser/sessions/tab_restore_service_unittest.cc b/chrome/browser/sessions/tab_restore_service_unittest.cc
index 72e734e..e0cc4a2 100644
--- a/chrome/browser/sessions/tab_restore_service_unittest.cc
+++ b/chrome/browser/sessions/tab_restore_service_unittest.cc
@@ -148,7 +148,7 @@
 
     SessionService* session_service =
         SessionServiceFactory::GetForProfile(profile());
-    session_service->SetWindowType(window_id(), Browser::TYPE_TABBED,
+    session_service->SetWindowType(window_id(), Browser::TYPE_NORMAL,
                                    SessionService::TYPE_NORMAL);
     session_service->SetTabWindow(window_id(), tab_id());
     session_service->SetTabIndexInWindow(window_id(), tab_id(), 0);
diff --git a/chrome/browser/sync/glue/synced_window_delegate_android.cc b/chrome/browser/sync/glue/synced_window_delegate_android.cc
index e19e59bc..f33fdcb0 100644
--- a/chrome/browser/sync/glue/synced_window_delegate_android.cc
+++ b/chrome/browser/sync/glue/synced_window_delegate_android.cc
@@ -40,11 +40,7 @@
   return tab_model_->GetActiveIndex();
 }
 
-bool SyncedWindowDelegateAndroid::IsApp() const {
-  return false;
-}
-
-bool SyncedWindowDelegateAndroid::IsTypeTabbed() const {
+bool SyncedWindowDelegateAndroid::IsTypeNormal() const {
   return is_tabbed_activity_;
 }
 
diff --git a/chrome/browser/sync/glue/synced_window_delegate_android.h b/chrome/browser/sync/glue/synced_window_delegate_android.h
index d7e094e5..dbe2830f 100644
--- a/chrome/browser/sync/glue/synced_window_delegate_android.h
+++ b/chrome/browser/sync/glue/synced_window_delegate_android.h
@@ -28,8 +28,7 @@
   SessionID GetSessionId() const override;
   int GetTabCount() const override;
   int GetActiveIndex() const override;
-  bool IsApp() const override;
-  bool IsTypeTabbed() const override;
+  bool IsTypeNormal() const override;
   bool IsTypePopup() const override;
   bool IsTabPinned(const sync_sessions::SyncedTabDelegate* tab) const override;
   sync_sessions::SyncedTabDelegate* GetTabAt(int index) const override;
diff --git a/chrome/browser/ui/ash/accelerator_commands_browsertest.cc b/chrome/browser/ui/ash/accelerator_commands_browsertest.cc
index adba912..6d14652 100644
--- a/chrome/browser/ui/ash/accelerator_commands_browsertest.cc
+++ b/chrome/browser/ui/ash/accelerator_commands_browsertest.cc
@@ -90,7 +90,7 @@
   // 1) Browser windows.
   aura::Window* window = browser()->window()->GetNativeWindow();
   views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window);
-  ASSERT_TRUE(browser()->is_type_tabbed());
+  ASSERT_TRUE(browser()->is_type_normal());
   ASSERT_TRUE(widget->IsActive());
   SetToInitialShowState(widget);
   EXPECT_TRUE(IsInitialShowState(widget));
@@ -116,7 +116,8 @@
                                           true));
 
   Browser* app_host_browser = new Browser(browser_create_params);
-  ASSERT_TRUE(app_host_browser->is_app());
+  ASSERT_FALSE(app_host_browser->is_type_popup());
+  ASSERT_TRUE(app_host_browser->is_type_app());
   AddBlankTabAndShow(app_host_browser);
   window = app_host_browser->window()->GetNativeWindow();
   widget = views::Widget::GetWidgetForNativeWindow(window);
@@ -136,7 +137,7 @@
       Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(), true);
   Browser* popup_browser = new Browser(browser_create_params);
   ASSERT_TRUE(popup_browser->is_type_popup());
-  ASSERT_FALSE(popup_browser->is_app());
+  ASSERT_FALSE(popup_browser->is_type_app());
   AddBlankTabAndShow(popup_browser);
   window = popup_browser->window()->GetNativeWindow();
   widget = views::Widget::GetWidgetForNativeWindow(window);
diff --git a/chrome/browser/ui/ash/chrome_new_window_client.cc b/chrome/browser/ui/ash/chrome_new_window_client.cc
index 9712599..cf60300b 100644
--- a/chrome/browser/ui/ash/chrome_new_window_client.cc
+++ b/chrome/browser/ui/ash/chrome_new_window_client.cc
@@ -217,7 +217,7 @@
 
 void ChromeNewWindowClient::NewTab() {
   Browser* browser = chrome::FindBrowserWithActiveWindow();
-  if (browser && browser->is_type_tabbed()) {
+  if (browser && browser->is_type_normal()) {
     chrome::NewTab(browser);
     return;
   }
diff --git a/chrome/browser/ui/ash/chrome_new_window_client_browsertest.cc b/chrome/browser/ui/ash/chrome_new_window_client_browsertest.cc
index 7abd5db..7d01314 100644
--- a/chrome/browser/ui/ash/chrome_new_window_client_browsertest.cc
+++ b/chrome/browser/ui/ash/chrome_new_window_client_browsertest.cc
@@ -156,7 +156,7 @@
     observer->WaitForNavigationFinished();
 
     EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
-    EXPECT_FALSE(GetLastActiveBrowser()->is_app());
+    EXPECT_FALSE(GetLastActiveBrowser()->is_type_app());
     content::WebContents* contents =
         GetLastActiveBrowser()->tab_strip_model()->GetActiveWebContents();
     EXPECT_EQ(url, contents->GetLastCommittedURL());
@@ -171,7 +171,7 @@
     observer->WaitForNavigationFinished();
 
     EXPECT_EQ(2u, chrome::GetTotalBrowserCount());
-    EXPECT_TRUE(GetLastActiveBrowser()->is_app());
+    EXPECT_TRUE(GetLastActiveBrowser()->is_type_app());
     content::WebContents* contents =
         GetLastActiveBrowser()->tab_strip_model()->GetActiveWebContents();
     EXPECT_EQ(app_url, contents->GetLastCommittedURL());
diff --git a/chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc b/chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc
index 5bcc76a1..2a6df5a 100644
--- a/chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc
+++ b/chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc
@@ -46,8 +46,8 @@
 
 // Returns true if this app matches the given |web_contents|. To accelerate
 // the matching, the app managing |extension| as well as the parsed
-// |refocus_pattern| get passed. If |is_app| is true, the application gets
-// first checked against its original URL since a windowed app might have
+// |refocus_pattern| get passed. If |deprecated_is_app| is true, the application
+// gets first checked against its original URL since a windowed app might have
 // navigated away from its app domain.
 bool WebContentMatchesApp(const std::string& app_id,
                           const extensions::Extension* extension,
@@ -56,7 +56,7 @@
                           Browser* browser) {
   // If the browser is an app window, and the app name matches the extension,
   // then the contents match the app.
-  if (browser->is_app()) {
+  if (browser->deprecated_is_app()) {
     const extensions::Extension* browser_extension =
         ExtensionRegistry::Get(browser->profile())
             ->GetExtensionById(
diff --git a/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc b/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
index 78c4efd..fcfa96b 100644
--- a/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
+++ b/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
@@ -78,7 +78,7 @@
   if (!browser || !multi_user_util::IsProfileFromActiveUser(browser->profile()))
     return false;
 
-  if (browser->is_app() && browser->is_type_popup()) {
+  if (browser->deprecated_is_app()) {
     // Crostini Terminals always have their own item.
     // TODO(rjwright): We shouldn't need to special-case Crostini here.
     // https://crbug.com/846546
@@ -111,7 +111,7 @@
       continue;
     }
     if (!IsBrowserRepresentedInBrowserList(browser) &&
-        !browser->is_type_tabbed()) {
+        !browser->is_type_normal()) {
       continue;
     }
     active_browsers.push_back(browser);
@@ -235,7 +235,7 @@
   ChromeLauncherController* controller = ChromeLauncherController::instance();
   for (auto* browser : GetListOfActiveBrowsers()) {
     TabStripModel* tab_strip = browser->tab_strip_model();
-    if (browser->is_type_tabbed())
+    if (browser->is_type_normal())
       found_tabbed_browser = true;
     if (!(event_flags & ui::EF_SHIFT_DOWN)) {
       app_menu_items.push_back({browser, kNoTab});
diff --git a/chrome/browser/ui/ash/launcher/browser_status_monitor.cc b/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
index fb10d2b..41c14bf 100644
--- a/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
+++ b/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
@@ -25,7 +25,7 @@
 namespace {
 
 bool IsV1WindowedApp(Browser* browser) {
-  if (!browser->is_type_popup() || !browser->is_app())
+  if (!browser->deprecated_is_app())
     return false;
   // Crostini terminal windows do not have an app id and are handled by
   // CrostiniAppWindowShelfController. All other app windows should have a non
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
index be591b3cf..c32f276e 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
@@ -489,7 +489,7 @@
 
 void ChromeLauncherController::UpdateV1AppState(const std::string& app_id) {
   for (Browser* browser : *BrowserList::GetInstance()) {
-    if (browser->is_app() || !browser->is_type_tabbed() ||
+    if (browser->deprecated_is_app() || !browser->is_type_normal() ||
         !multi_user_util::IsProfileFromActiveUser(browser->profile())) {
       continue;
     }
@@ -1094,8 +1094,7 @@
            browser_list->begin_last_active();
        it != browser_list->end_last_active(); ++it) {
     Browser* browser = *it;
-    if (!browser->is_type_tabbed() && browser->is_type_popup() &&
-        browser->is_app() &&
+    if (browser->deprecated_is_app() &&
         app_id == web_app::GetAppIdFromApplicationName(browser->app_name()) &&
         profile == browser->profile()) {
       browser_to_close.push_back(browser);
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
index f4adeca..707405c 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
@@ -1709,7 +1709,7 @@
   for (BrowserList::const_reverse_iterator it =
            browser_list->begin_last_active();
        it != browser_list->end_last_active() && !app_browser; ++it) {
-    if ((*it)->is_app()) {
+    if ((*it)->deprecated_is_app()) {
       app_browser = *it;
       break;
     }
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
index 3b75220c..2cd2a8f 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
@@ -278,7 +278,7 @@
 class ChromeLauncherControllerTest : public BrowserWithTestWindowTest {
  protected:
   ChromeLauncherControllerTest()
-      : BrowserWithTestWindowTest(Browser::TYPE_TABBED) {}
+      : BrowserWithTestWindowTest(Browser::TYPE_NORMAL) {}
 
   ~ChromeLauncherControllerTest() override {}
 
@@ -502,7 +502,7 @@
       Profile* profile) {
     TestBrowserWindow* browser_window = CreateTestBrowserWindowAura();
     new TestBrowserWindowOwner(browser_window);
-    return CreateBrowser(profile, Browser::TYPE_TABBED, false, browser_window);
+    return CreateBrowser(profile, Browser::TYPE_NORMAL, false, browser_window);
   }
 
   // Create an uninitialized chrome launcher controller instance.
@@ -4763,7 +4763,7 @@
       true /* trusted_srouce */, browser()->window()->GetBounds(), profile(),
       true /* user_gesture */);
   params.window = browser()->window();
-  params.type = Browser::TYPE_TABBED;
+  params.type = Browser::TYPE_NORMAL;
   Browser* b = new Browser(params);
   set_browser(b);
   chrome::NewTab(browser());
diff --git a/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc b/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc
index 494e6b8..ea58d32 100644
--- a/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc
+++ b/chrome/browser/ui/ash/launcher/launcher_controller_helper.cc
@@ -61,7 +61,7 @@
 
   // Use the Browser's app name to determine the extension for app windows and
   // use the tab's url for app tabs.
-  if (browser && browser->is_app()) {
+  if (browser && browser->deprecated_is_app()) {
     return registry->GetExtensionById(
         web_app::GetAppIdFromApplicationName(browser->app_name()),
         extensions::ExtensionRegistry::EVERYTHING);
diff --git a/chrome/browser/ui/ash/launcher/multi_profile_browser_status_monitor.cc b/chrome/browser/ui/ash/launcher/multi_profile_browser_status_monitor.cc
index e736894..bf9aa56 100644
--- a/chrome/browser/ui/ash/launcher/multi_profile_browser_status_monitor.cc
+++ b/chrome/browser/ui/ash/launcher/multi_profile_browser_status_monitor.cc
@@ -42,7 +42,7 @@
 
   // Remove old (tabbed V1) applications.
   for (Browser* browser : *browser_list) {
-    if (!browser->is_app() && browser->is_type_tabbed() &&
+    if (browser->is_type_normal() &&
         !multi_user_util::IsProfileFromActiveUser(browser->profile())) {
       for (int i = 0; i < browser->tab_strip_model()->count(); ++i) {
         launcher_controller_->UpdateAppState(
@@ -53,7 +53,7 @@
 
   // Handle apps in browser tabs: Add new (tabbed V1) applications.
   for (Browser* browser : *browser_list) {
-    if (!browser->is_app() && browser->is_type_tabbed() &&
+    if (browser->is_type_normal() &&
         multi_user_util::IsProfileFromActiveUser(browser->profile())) {
       for (int i = 0; i < browser->tab_strip_model()->count(); ++i) {
         launcher_controller_->UpdateAppState(
@@ -68,7 +68,7 @@
 }
 
 void MultiProfileBrowserStatusMonitor::AddV1AppToShelf(Browser* browser) {
-  DCHECK(browser->is_type_popup() && browser->is_app());
+  DCHECK(browser->deprecated_is_app());
   DCHECK(!base::Contains(app_list_, browser));
   app_list_.push_back(browser);
   if (multi_user_util::IsProfileFromActiveUser(browser->profile())) {
@@ -77,7 +77,7 @@
 }
 
 void MultiProfileBrowserStatusMonitor::RemoveV1AppFromShelf(Browser* browser) {
-  DCHECK(browser->is_type_popup() && browser->is_app());
+  DCHECK(browser->deprecated_is_app());
   AppList::iterator it = std::find(app_list_.begin(), app_list_.end(), browser);
   DCHECK(it != app_list_.end());
   app_list_.erase(it);
diff --git a/chrome/browser/ui/ash/media_client_impl_unittest.cc b/chrome/browser/ui/ash/media_client_impl_unittest.cc
index 2186605..a38a90f 100644
--- a/chrome/browser/ui/ash/media_client_impl_unittest.cc
+++ b/chrome/browser/ui/ash/media_client_impl_unittest.cc
@@ -72,7 +72,7 @@
     BrowserWithTestWindowTest::SetUp();
 
     alt_window_ = CreateBrowserWindow();
-    alt_browser_ = CreateBrowser(alt_profile(), Browser::TYPE_TABBED, false,
+    alt_browser_ = CreateBrowser(alt_profile(), Browser::TYPE_NORMAL, false,
                                  alt_window_.get());
 
     extensions::MediaPlayerAPI::Get(profile());
diff --git a/chrome/browser/ui/ash/multi_user/multi_profile_support.cc b/chrome/browser/ui/ash/multi_user/multi_profile_support.cc
index 173acbd..54c8879b 100644
--- a/chrome/browser/ui/ash/multi_user/multi_profile_support.cc
+++ b/chrome/browser/ui/ash/multi_user/multi_profile_support.cc
@@ -50,7 +50,7 @@
   if (browser) {
     if (browser->profile()->IsOffTheRecord()) {
       window_type = TELEPORT_WINDOW_INCOGNITO_BROWSER;
-    } else if (browser->is_app()) {
+    } else if (browser->deprecated_is_app()) {
       window_type = TELEPORT_WINDOW_V1_APP;
     } else if (browser->is_type_popup()) {
       window_type = TELEPORT_WINDOW_POPUP;
diff --git a/chrome/browser/ui/ash/tab_scrubber.cc b/chrome/browser/ui/ash/tab_scrubber.cc
index cd25197b..de9b403 100644
--- a/chrome/browser/ui/ash/tab_scrubber.cc
+++ b/chrome/browser/ui/ash/tab_scrubber.cc
@@ -202,7 +202,7 @@
 
 Browser* TabScrubber::GetActiveBrowser() {
   Browser* browser = chrome::FindLastActive();
-  if (!browser || browser->type() != Browser::TYPE_TABBED ||
+  if (!browser || !browser->is_type_normal() ||
       !browser->window()->IsActive()) {
     return nullptr;
   }
diff --git a/chrome/browser/ui/ash/tablet_mode_page_behavior_browsertest.cc b/chrome/browser/ui/ash/tablet_mode_page_behavior_browsertest.cc
index 5146dfed..5141c0c0 100644
--- a/chrome/browser/ui/ash/tablet_mode_page_behavior_browsertest.cc
+++ b/chrome/browser/ui/ash/tablet_mode_page_behavior_browsertest.cc
@@ -141,7 +141,7 @@
   Browser* browser = new Browser(params);
   AddBlankTabAndShow(browser);
 
-  ASSERT_TRUE(browser->is_app());
+  ASSERT_TRUE(browser->is_type_app());
   auto* web_contents = GetActiveWebContents(browser);
   ASSERT_TRUE(web_contents);
 
diff --git a/chrome/browser/ui/blocked_content/popunder_preventer.cc b/chrome/browser/ui/blocked_content/popunder_preventer.cc
index 24fb87fe..678ba5b 100644
--- a/chrome/browser/ui/blocked_content/popunder_preventer.cc
+++ b/chrome/browser/ui/blocked_content/popunder_preventer.cc
@@ -44,7 +44,7 @@
   // that it can be re-activated once the dialog (or whatever is causing the
   // activation) is closed.
   Browser* active_browser = BrowserList::GetInstance()->GetLastActive();
-  if (!active_browser || !active_browser->is_type_popup())
+  if (!active_browser || active_browser->is_type_normal())
     return;
 
   content::WebContents* active_popup =
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
index 7247885..cc3369e 100644
--- a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
+++ b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
@@ -235,7 +235,7 @@
       EXPECT_NE(browser, new_browser);
       web_contents = new_browser->tab_strip_model()->GetActiveWebContents();
       if (what_to_expect == kExpectNewWindow)
-        EXPECT_TRUE(new_browser->is_type_tabbed());
+        EXPECT_TRUE(new_browser->is_type_normal());
     } else {
       tab_add.Wait();
       new_browser = browser;
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 5822aa2..96885f12 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -325,7 +325,7 @@
 // Browser, CreateParams:
 
 Browser::CreateParams::CreateParams(Profile* profile, bool user_gesture)
-    : CreateParams(TYPE_TABBED, profile, user_gesture) {}
+    : CreateParams(TYPE_NORMAL, profile, user_gesture) {}
 
 Browser::CreateParams::CreateParams(Type type,
                                     Profile* profile,
@@ -352,7 +352,7 @@
     bool user_gesture) {
   DCHECK(!app_name.empty());
 
-  CreateParams params(TYPE_POPUP, profile, user_gesture);
+  CreateParams params(TYPE_APP, profile, user_gesture);
   params.app_name = app_name;
   params.trusted_source = trusted_source;
   params.initial_bounds = window_bounds;
@@ -363,7 +363,7 @@
 // static
 Browser::CreateParams Browser::CreateParams::CreateForDevTools(
     Profile* profile) {
-  CreateParams params(TYPE_POPUP, profile, true);
+  CreateParams params(TYPE_DEVTOOLS, profile, true);
   params.app_name = DevToolsWindow::kDevToolsApp;
   params.trusted_source = true;
   return params;
@@ -469,7 +469,7 @@
                           base::Unretained(this),
                           BOOKMARK_BAR_STATE_CHANGE_PREF_CHANGE));
 
-  if (search::IsInstantExtendedAPIEnabled() && is_type_tabbed())
+  if (search::IsInstantExtendedAPIEnabled() && is_type_normal())
     instant_controller_.reset(new BrowserInstantController(this));
 
   UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_INIT);
@@ -645,14 +645,6 @@
   return find_bar_controller_.get() != NULL;
 }
 
-bool Browser::is_app() const {
-  return !app_name_.empty();
-}
-
-bool Browser::is_devtools() const {
-  return app_name_ == DevToolsWindow::kDevToolsApp;
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 // Browser, State Storage and Retrieval for UI:
 
@@ -698,7 +690,7 @@
   }
 
   // If there is no title, leave it empty for apps.
-  if (title.empty() && !is_app())
+  if (title.empty() && (is_type_normal() || is_type_popup()))
     title = CoreTabHelper::GetDefaultTitle();
 
 #if defined(OS_MACOSX)
@@ -709,14 +701,15 @@
   // If there is no title and this is an app, fall back on the app name. This
   // ensures that the native window gets a title which is important for a11y,
   // for example the window selector uses the Aura window title.
-  if (title.empty() && is_app() && include_app_name) {
+  if (title.empty() && (is_type_app() || is_type_devtools()) &&
+      include_app_name) {
     return base::UTF8ToUTF16(
         app_controller_ ? app_controller_->GetAppShortName() : app_name());
   }
 
   // Include the app name in window titles for tabbed browser windows when
   // requested with |include_app_name|.
-  return (!is_app() && include_app_name)
+  return ((is_type_normal() || is_type_popup()) && include_app_name)
              ? l10n_util::GetStringFUTF16(IDS_BROWSER_WINDOW_TITLE_FORMAT,
                                           title)
              : title;
@@ -820,11 +813,11 @@
       TabRestoreServiceFactory::GetForProfile(profile());
 
 #if defined(USE_AURA)
-  if (tab_restore_service && is_app() && !is_devtools())
+  if (tab_restore_service && is_type_app())
     tab_restore_service->BrowserClosing(live_tab_context());
 #endif
 
-  if (tab_restore_service && is_type_tabbed() && tab_strip_model_->count())
+  if (tab_restore_service && is_type_normal() && tab_strip_model_->count())
     tab_restore_service->BrowserClosing(live_tab_context());
 
   BrowserList::NotifyBrowserCloseStarted(this);
@@ -1142,7 +1135,7 @@
 
 bool Browser::CanOverscrollContent() {
 #if defined(USE_AURA)
-  return !is_devtools() &&
+  return !is_type_devtools() &&
          base::FeatureList::IsEnabled(features::kOverscrollHistoryNavigation);
 #else
   return false;
@@ -1387,7 +1380,7 @@
   startup_metric_utils::RecordBrowserWindowDisplay(base::TimeTicks::Now());
 
   // Nothing to do for non-tabbed windows.
-  if (!is_type_tabbed())
+  if (!is_type_normal())
     return;
 
   // Show any pending global error bubble.
@@ -1403,7 +1396,7 @@
 
 WebContents* Browser::OpenURLFromTab(WebContents* source,
                                      const OpenURLParams& params) {
-  if (is_devtools()) {
+  if (is_type_devtools()) {
     DevToolsWindow* window = DevToolsWindow::AsDevToolsWindow(source);
     DCHECK(window);
     return window->OpenURLFromTab(source, params);
@@ -1521,7 +1514,7 @@
 }
 
 void Browser::SetContentsBounds(WebContents* source, const gfx::Rect& bounds) {
-  if (!is_type_popup())
+  if (is_type_normal())
     return;
 
   window_->SetBounds(bounds);
@@ -1562,8 +1555,8 @@
 void Browser::BeforeUnloadFired(WebContents* web_contents,
                                 bool proceed,
                                 bool* proceed_to_fire_unload) {
-  if (is_devtools() && DevToolsWindow::HandleBeforeUnload(
-                           web_contents, proceed, proceed_to_fire_unload))
+  if (is_type_devtools() && DevToolsWindow::HandleBeforeUnload(
+                                web_contents, proceed, proceed_to_fire_unload))
     return;
 
   *proceed_to_fire_unload =
@@ -1727,7 +1720,7 @@
   if (window_->IsFullscreen())
     return blink::kWebDisplayModeFullscreen;
 
-  if (is_app() && is_type_popup())
+  if (is_type_app() || is_type_devtools())
     return blink::kWebDisplayModeStandalone;
 
   return blink::kWebDisplayModeBrowser;
@@ -2611,7 +2604,7 @@
   }
 }
 
-bool Browser::TabbedBrowserSupportsWindowFeature(WindowFeature feature,
+bool Browser::NormalBrowserSupportsWindowFeature(WindowFeature feature,
                                                  bool check_can_support) const {
   bool fullscreen = ShouldHideUIForFullscreen();
   switch (feature) {
@@ -2692,19 +2685,19 @@
 
 bool Browser::SupportsWindowFeatureImpl(WindowFeature feature,
                                         bool check_can_support) const {
-  // TODO(crbug.com/992834): Change to TYPE_WEB_APP.
-  if (app_controller_)
-    return WebAppBrowserSupportsWindowFeature(feature, check_can_support);
-
-  // TODO(crbug.com/992834): Change to TYPE_LEGACY_APP.
-  if (is_app())
-    return LegacyAppBrowserSupportsWindowFeature(feature, check_can_support);
-
   switch (type_) {
-    case TYPE_TABBED:
-      return TabbedBrowserSupportsWindowFeature(feature, check_can_support);
+    case TYPE_NORMAL:
+      return NormalBrowserSupportsWindowFeature(feature, check_can_support);
     case TYPE_POPUP:
       return PopupBrowserSupportsWindowFeature(feature, check_can_support);
+    case TYPE_APP:
+      // TODO(crbug.com/992834): Change to TYPE_WEB_APP.
+      if (app_controller_)
+        return WebAppBrowserSupportsWindowFeature(feature, check_can_support);
+      // TODO(crbug.com/992834): Change to TYPE_LEGACY_APP.
+      return LegacyAppBrowserSupportsWindowFeature(feature, check_can_support);
+    case TYPE_DEVTOOLS:
+      return LegacyAppBrowserSupportsWindowFeature(feature, check_can_support);
   }
 }
 
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index d3cc063..253a8e19 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -121,14 +121,16 @@
   // enum, look at SessionService::WindowType to see if it needs to be
   // updated.
   enum Type {
+    // Normal tabbed non-app browser (previously TYPE_TABBED).
+    TYPE_NORMAL,
+    // Popup browser.
+    TYPE_POPUP,
+    // App browser.
+    TYPE_APP,
+    // Devtools browser.
+    TYPE_DEVTOOLS,
     // If you add a new type, consider updating the test
     // BrowserTest.StartMaximized.
-    // TODO(crbug.com/990158): It is now possible that even TYPE_POPUP can have
-    // tabs.  Rename TYPE_TABBED to TYPE_DEFAULT, and replace calls to
-    // |is_type_tabbed()| with SupportsWindowFeature(Browser::FEATURE_TABSTRIP)
-    // where the client needs to know if tabs are supported in the browser.
-    TYPE_TABBED = 1,
-    TYPE_POPUP = 2
   };
 
   // Possible elements of the Browser window.
@@ -576,11 +578,17 @@
       bool did_finish_load) override;
   bool ShouldShowStaleContentOnEviction(content::WebContents* source) override;
 
-  bool is_type_tabbed() const { return type_ == TYPE_TABBED; }
+  bool is_type_normal() const { return type_ == TYPE_NORMAL; }
   bool is_type_popup() const { return type_ == TYPE_POPUP; }
-
-  bool is_app() const;
-  bool is_devtools() const;
+  bool is_type_app() const { return type_ == TYPE_APP; }
+  bool is_type_devtools() const { return type_ == TYPE_DEVTOOLS; }
+  // TODO(crbug.com/990158): |deprecated_is_app()| is added for backwards
+  // compatibility for previous callers to |is_app()| which returned true when
+  // |app_name_| is non-empty.  This includes TYPE_APP and TYPE_DEVTOOLS.
+  // Existing callers should change to use the appropriate is_type_* functions.
+  bool deprecated_is_app() const {
+    return type_ == TYPE_APP || type_ == TYPE_DEVTOOLS;
+  }
 
   // True when the mouse cursor is locked.
   bool IsMouseLocked() const;
@@ -935,7 +943,7 @@
   // Shared code between Reload() and ReloadBypassingCache().
   void ReloadInternal(WindowOpenDisposition disposition, bool bypass_cache);
 
-  bool TabbedBrowserSupportsWindowFeature(WindowFeature feature,
+  bool NormalBrowserSupportsWindowFeature(WindowFeature feature,
                                           bool check_can_support) const;
 
   bool PopupBrowserSupportsWindowFeature(WindowFeature feature,
@@ -1008,7 +1016,7 @@
   // This name should be set when:
   // 1) we launch an application via an application shortcut or extension API.
   // 2) we launch an undocked devtool window.
-  std::string app_name_;
+  const std::string app_name_;
 
   // True if the source is trusted (i.e. we do not need to show the URL in a
   // a popup window). Also used to determine which app windows to save and
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index 6123e43..21aa31f 100644
--- a/chrome/browser/ui/browser_browsertest.cc
+++ b/chrome/browser/ui/browser_browsertest.cc
@@ -1300,7 +1300,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(BrowserTest, OverscrollEnabledInRegularWindows) {
-  ASSERT_TRUE(browser()->is_type_tabbed());
+  ASSERT_TRUE(browser()->is_type_normal());
   EXPECT_TRUE(browser()->CanOverscrollContent());
 }
 
@@ -1528,7 +1528,7 @@
   ASSERT_TRUE(new_browser);
   ASSERT_TRUE(new_browser != browser());
 
-  EXPECT_TRUE(new_browser->is_app());
+  EXPECT_TRUE(new_browser->is_type_app());
 
   // The browser's app name should include the extension's id.
   std::string app_name = new_browser->app_name_;
@@ -1540,22 +1540,30 @@
 // Makes sure the browser doesn't crash when
 // set_show_state(ui::SHOW_STATE_MAXIMIZED) has been invoked.
 IN_PROC_BROWSER_TEST_F(BrowserTest, StartMaximized) {
-  Browser::Type types[] = {Browser::TYPE_TABBED, Browser::TYPE_POPUP};
-  for (size_t i = 0; i < base::size(types); ++i) {
-    Browser::CreateParams params(types[i], browser()->profile(), true);
-    params.initial_show_state = ui::SHOW_STATE_MAXIMIZED;
-    AddBlankTabAndShow(new Browser(params));
+  Browser::CreateParams params[] = {
+      Browser::CreateParams(Browser::TYPE_NORMAL, browser()->profile(), true),
+      Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(), true),
+      Browser::CreateParams::CreateForApp("app_name", true, gfx::Rect(),
+                                          browser()->profile(), true),
+      Browser::CreateParams::CreateForDevTools(browser()->profile())};
+  for (size_t i = 0; i < base::size(params); ++i) {
+    params[i].initial_show_state = ui::SHOW_STATE_MAXIMIZED;
+    AddBlankTabAndShow(new Browser(params[i]));
   }
 }
 
 // Makes sure the browser doesn't crash when
 // set_show_state(ui::SHOW_STATE_MINIMIZED) has been invoked.
 IN_PROC_BROWSER_TEST_F(BrowserTest, StartMinimized) {
-  Browser::Type types[] = {Browser::TYPE_TABBED, Browser::TYPE_POPUP};
-  for (size_t i = 0; i < base::size(types); ++i) {
-    Browser::CreateParams params(types[i], browser()->profile(), true);
-    params.initial_show_state = ui::SHOW_STATE_MINIMIZED;
-    AddBlankTabAndShow(new Browser(params));
+  Browser::CreateParams params[] = {
+      Browser::CreateParams(Browser::TYPE_NORMAL, browser()->profile(), true),
+      Browser::CreateParams(Browser::TYPE_POPUP, browser()->profile(), true),
+      Browser::CreateParams::CreateForApp("app_name", true, gfx::Rect(),
+                                          browser()->profile(), true),
+      Browser::CreateParams::CreateForDevTools(browser()->profile())};
+  for (size_t i = 0; i < base::size(params); ++i) {
+    params[i].initial_show_state = ui::SHOW_STATE_MINIMIZED;
+    AddBlankTabAndShow(new Browser(params[i]));
   }
 }
 
@@ -2238,7 +2246,7 @@
   // Test that an application browser window loads correctly.
 
   // Verify the browser is in application mode.
-  EXPECT_TRUE(browser()->is_app());
+  EXPECT_TRUE(browser()->is_type_app());
 }
 
 // Confirm chrome://version contains some expected content.
diff --git a/chrome/browser/ui/browser_close_unittest.cc b/chrome/browser/ui/browser_close_unittest.cc
index fdb35f40..7a94866 100644
--- a/chrome/browser/ui/browser_close_unittest.cc
+++ b/chrome/browser/ui/browser_close_unittest.cc
@@ -157,7 +157,7 @@
     for (int i = 0; i < num_windows; ++i) {
       TestBrowserWindow* window = new TestBrowserWindow();
       Browser::CreateParams params(profile, true);
-      params.type = Browser::TYPE_TABBED;
+      params.type = Browser::TYPE_NORMAL;
       params.window = window;
       Browser* browser = new Browser(params);
 
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
index 4c2d25b6..3b69230 100644
--- a/chrome/browser/ui/browser_command_controller.cc
+++ b/chrome/browser/ui/browser_command_controller.cc
@@ -213,7 +213,7 @@
     int command_id,
     const content::NativeWebKeyboardEvent& event) {
   // In Apps mode, no keys are reserved.
-  if (browser_->is_app())
+  if (browser_->deprecated_is_app())
     return false;
 
 #if defined(OS_CHROMEOS)
@@ -956,7 +956,7 @@
       profile()->IsGuestSession() || profile()->IsSystemProfile();
   DCHECK(!profile()->IsSystemProfile())
       << "Ought to never have browser for the system profile.";
-  const bool normal_window = browser_->is_type_tabbed();
+  const bool normal_window = browser_->is_type_normal();
   UpdateOpenFileState(&command_updater_);
   UpdateCommandsForDevTools();
   command_updater_.UpdateCommandEnabled(IDC_TASK_MANAGER, CanOpenTaskManager());
@@ -985,8 +985,8 @@
   UpdateShowSyncState(true);
 
   // Navigation commands
-  command_updater_.UpdateCommandEnabled(IDC_HOME,
-                                        normal_window || browser_->is_app());
+  command_updater_.UpdateCommandEnabled(
+      IDC_HOME, normal_window || browser_->deprecated_is_app());
 
   const bool is_web_app =
       web_app::AppBrowserController::IsForWebAppBrowser(browser_);
@@ -1098,11 +1098,12 @@
 
   // Window management commands
   command_updater_.UpdateCommandEnabled(
-      IDC_DUPLICATE_TAB, !browser_->is_app() && CanDuplicateTab(browser_));
+      IDC_DUPLICATE_TAB,
+      !browser_->deprecated_is_app() && CanDuplicateTab(browser_));
   command_updater_.UpdateCommandEnabled(IDC_WINDOW_MUTE_SITE,
-                                        !browser_->is_app());
+                                        !browser_->deprecated_is_app());
   command_updater_.UpdateCommandEnabled(IDC_WINDOW_PIN_TAB,
-                                        !browser_->is_app());
+                                        !browser_->deprecated_is_app());
 
   // Page-related commands
   window()->SetStarredState(
@@ -1112,7 +1113,7 @@
                                         CanViewSource(browser_));
   command_updater_.UpdateCommandEnabled(IDC_EMAIL_PAGE_LOCATION,
                                         CanEmailPageLocation(browser_));
-  if (browser_->is_devtools())
+  if (browser_->is_type_devtools())
     command_updater_.UpdateCommandEnabled(IDC_OPEN_FILE, false);
 
   bool can_create_bookmark_app = CanCreateBookmarkApp(browser_);
@@ -1228,7 +1229,7 @@
 
   // Window management commands
   command_updater_.UpdateCommandEnabled(
-      IDC_SHOW_AS_TAB, !browser_->is_type_tabbed() && !is_fullscreen);
+      IDC_SHOW_AS_TAB, !browser_->is_type_normal() && !is_fullscreen);
 
   // Focus various bits of UI
   command_updater_.UpdateCommandEnabled(IDC_FOCUS_TOOLBAR, show_main_ui);
@@ -1249,7 +1250,7 @@
   command_updater_.UpdateCommandEnabled(IDC_DEVELOPER_MENU, show_main_ui);
 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
   command_updater_.UpdateCommandEnabled(
-      IDC_FEEDBACK, show_main_ui || browser_->is_devtools());
+      IDC_FEEDBACK, show_main_ui || browser_->is_type_devtools());
 #endif
   UpdateShowSyncState(show_main_ui);
 
@@ -1285,7 +1286,7 @@
 
 void BrowserCommandController::UpdateCommandsForHostedAppAvailability() {
   bool has_toolbar =
-      browser_->is_type_tabbed() ||
+      browser_->is_type_normal() ||
       web_app::AppBrowserController::IsForWebAppBrowser(browser_);
   if (window() && window()->ShouldHideUIForFullscreen())
     has_toolbar = false;
@@ -1409,8 +1410,8 @@
 
 void BrowserCommandController::UpdateCommandsForFind() {
   TabStripModel* model = browser_->tab_strip_model();
-  bool enabled =
-      !model->IsTabBlocked(model->active_index()) && !browser_->is_devtools();
+  bool enabled = !model->IsTabBlocked(model->active_index()) &&
+                 !browser_->is_type_devtools();
 
   command_updater_.UpdateCommandEnabled(IDC_FIND, enabled);
   command_updater_.UpdateCommandEnabled(IDC_FIND_NEXT, enabled);
diff --git a/chrome/browser/ui/browser_command_controller_unittest.cc b/chrome/browser/ui/browser_command_controller_unittest.cc
index c12b4f9..6348c5f 100644
--- a/chrome/browser/ui/browser_command_controller_unittest.cc
+++ b/chrome/browser/ui/browser_command_controller_unittest.cc
@@ -114,10 +114,16 @@
 }
 
 TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKeyIsApp) {
-  browser()->app_name_ = "app";
-  ASSERT_TRUE(browser()->is_app());
+  Browser::CreateParams params = Browser::CreateParams::CreateForApp(
+      "app",
+      /*trusted_source=*/true, browser()->window()->GetBounds(), profile(),
+      /*user_gesture=*/true);
+  params.window = browser()->window();
+  set_browser(new Browser(params));
 
-  // When is_app(), no keys are reserved.
+  ASSERT_TRUE(browser()->is_type_app());
+
+  // When is_type_app(), no keys are reserved.
 #if defined(OS_CHROMEOS)
   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
       IDC_BACK, content::NativeWebKeyboardEvent(ui::KeyEvent(
@@ -182,8 +188,13 @@
   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
 
   // Enabled for app windows.
-  browser()->app_name_ = "app";
-  ASSERT_TRUE(browser()->is_app());
+  Browser::CreateParams params = Browser::CreateParams::CreateForApp(
+      "app",
+      /*trusted_source=*/true, browser()->window()->GetBounds(), profile(),
+      /*user_gesture=*/true);
+  params.window = browser()->window();
+  set_browser(new Browser(params));
+  ASSERT_TRUE(browser()->is_type_app());
   browser()->command_controller()->FullscreenStateChanged();
   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
 }
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc
index 3ece2ed7..40051a8 100644
--- a/chrome/browser/ui/browser_commands.cc
+++ b/chrome/browser/ui/browser_commands.cc
@@ -184,7 +184,7 @@
   return browser_defaults::bookmarks_enabled &&
          browser->profile()->GetPrefs()->GetBoolean(
              bookmarks::prefs::kEditBookmarksEnabled) &&
-         model && model->loaded() && browser->is_type_tabbed() &&
+         model && model->loaded() && browser->is_type_normal() &&
          (!check_remove_bookmark_ui ||
           !chrome::ShouldRemoveBookmarkThisPageUI(browser->profile()));
 }
@@ -421,7 +421,7 @@
 
 Browser* OpenEmptyWindow(Profile* profile) {
   Browser* browser =
-      new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile, true));
+      new Browser(Browser::CreateParams(Browser::TYPE_NORMAL, profile, true));
   AddTabAt(browser, GURL(), -1, true);
   browser->window()->Show();
   return browser;
@@ -497,7 +497,7 @@
 }
 
 bool CanReload(const Browser* browser) {
-  return !browser->is_devtools();
+  return !browser->is_type_devtools();
 }
 
 void Home(Browser* browser, WindowOpenDisposition disposition) {
@@ -521,7 +521,7 @@
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   // With bookmark apps enabled, hosted apps should return to their launch page
   // when the home button is pressed.
-  if (browser->is_app()) {
+  if (browser->deprecated_is_app()) {
     const extensions::Extension* extension = GetExtensionForBrowser(browser);
     if (!extension)
       return;
@@ -749,7 +749,7 @@
         index + 1, std::move(contents_dupe), add_types, old_group);
   } else {
     Browser* new_browser = NULL;
-    if (browser->is_app() && !browser->is_type_popup()) {
+    if (browser->deprecated_is_app()) {
       new_browser = new Browser(Browser::CreateParams::CreateForApp(
           browser->app_name(), browser->is_trusted_source(), gfx::Rect(),
           browser->profile(), true));
@@ -975,7 +975,7 @@
           prefs::kAllowFileSelectionDialogs)) {
     return false;
   }
-  return !browser->is_devtools() &&
+  return !browser->is_type_devtools() &&
          !(GetContentRestrictions(browser) & CONTENT_RESTRICTION_SAVE);
 }
 
@@ -1315,10 +1315,10 @@
 }
 
 bool CanViewSource(const Browser* browser) {
-  return !browser->is_devtools() && browser->tab_strip_model()
-                                        ->GetActiveWebContents()
-                                        ->GetController()
-                                        .CanViewSource();
+  return !browser->is_type_devtools() && browser->tab_strip_model()
+                                             ->GetActiveWebContents()
+                                             ->GetController()
+                                             .CanViewSource();
 }
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/ui/browser_finder.cc b/chrome/browser/ui/browser_finder.cc
index 4dbecbbb..d7c009c 100644
--- a/chrome/browser/ui/browser_finder.cc
+++ b/chrome/browser/ui/browser_finder.cc
@@ -43,7 +43,7 @@
 // See BrowserMatches for details.
 const int kMatchOriginalProfile = 1 << 0;
 const int kMatchCanSupportWindowFeature = 1 << 1;
-const int kMatchTabbed = 1 << 2;
+const int kMatchNormal = 1 << 2;
 const int kMatchDisplayId = 1 << 3;
 #if defined(OS_WIN)
 const int kMatchCurrentWorkspace = 1 << 4;
@@ -98,7 +98,7 @@
 //   incognito windows.
 // . If it contains kMatchCanSupportWindowFeature
 //   |CanSupportWindowFeature(window_feature)| must return true.
-// . If it contains kMatchTabbed, the browser must be a tabbed browser.
+// . If it contains kMatchNormal, the browser must be a normal tabbed browser.
 bool BrowserMatches(Browser* browser,
                     Profile* profile,
                     Browser::WindowFeature window_feature,
@@ -145,7 +145,7 @@
 #endif
   }
 
-  if ((match_types & kMatchTabbed) && !browser->is_type_tabbed())
+  if ((match_types & kMatchNormal) && !browser->is_type_normal())
     return false;
 
 #if defined(OS_WIN)
@@ -192,7 +192,7 @@
     return NULL;
   uint32_t match_types = kMatchAny;
   if (match_tabbed)
-    match_types |= kMatchTabbed;
+    match_types |= kMatchNormal;
   if (match_original_profiles)
     match_types |= kMatchOriginalProfile;
   if (display_id != display::kInvalidDisplayId)
@@ -305,7 +305,7 @@
 }
 
 size_t GetTabbedBrowserCount(Profile* profile) {
-  return GetBrowserCountImpl(profile, kMatchTabbed);
+  return GetBrowserCountImpl(profile, kMatchNormal);
 }
 
 }  // namespace chrome
diff --git a/chrome/browser/ui/browser_list.cc b/chrome/browser/ui/browser_list.cc
index 7de80a8..cbb555b 100644
--- a/chrome/browser/ui/browser_list.cc
+++ b/chrome/browser/ui/browser_list.cc
@@ -321,7 +321,7 @@
   BrowserList* list = BrowserList::GetInstance();
   return std::count_if(list->begin(), list->end(), [profile](Browser* browser) {
     return browser->profile()->IsSameProfile(profile) &&
-           browser->profile()->IsOffTheRecord() && !browser->is_devtools();
+           browser->profile()->IsOffTheRecord() && !browser->is_type_devtools();
   });
 }
 
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc
index e817da5..0370666 100644
--- a/chrome/browser/ui/browser_navigator.cc
+++ b/chrome/browser/ui/browser_navigator.cc
@@ -482,7 +482,7 @@
   // focusing a regular browser window an opening a tab in the background
   // of that window. Change the disposition to NEW_FOREGROUND_TAB so that
   // the new tab is focused.
-  if (source_browser && source_browser->is_app() &&
+  if (source_browser && source_browser->deprecated_is_app() &&
       params->disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB) {
     params->disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB;
   }
diff --git a/chrome/browser/ui/browser_navigator_browsertest.cc b/chrome/browser/ui/browser_navigator_browsertest.cc
index 09826398..be4c8c9 100644
--- a/chrome/browser/ui/browser_navigator_browsertest.cc
+++ b/chrome/browser/ui/browser_navigator_browsertest.cc
@@ -452,7 +452,7 @@
   EXPECT_EQ(1, browser()->tab_strip_model()->count());
   EXPECT_EQ(1, popup->tab_strip_model()->count());
   EXPECT_EQ(1, params.browser->tab_strip_model()->count());
-  EXPECT_TRUE(params.browser->is_type_tabbed());
+  EXPECT_TRUE(params.browser->is_type_normal());
 }
 
 // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
@@ -471,7 +471,7 @@
   EXPECT_TRUE(browser->window()->IsActive());
 #endif
   EXPECT_TRUE(params.browser->is_type_popup());
-  EXPECT_FALSE(params.browser->is_app());
+  EXPECT_FALSE(params.browser->is_type_app());
 
   // We should have two windows, the browser() provided by the framework and the
   // new popup window.
@@ -481,7 +481,7 @@
 }
 
 // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
-// from a normal Browser results in a new Browser with is_app() true.
+// from a normal Browser results in a new Browser with is_type_app() true.
 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup_ExtensionId) {
   NavigateParams params(MakeNavigateParams());
   params.disposition = WindowOpenDisposition::NEW_POPUP;
@@ -492,8 +492,8 @@
 
   // Navigate() should have opened a new, focused popup window.
   EXPECT_NE(browser(), params.browser);
-  EXPECT_TRUE(params.browser->is_type_popup());
-  EXPECT_TRUE(params.browser->is_app());
+  EXPECT_FALSE(params.browser->is_type_popup());
+  EXPECT_TRUE(params.browser->is_type_app());
 
   // We should have two windows, the browser() provided by the framework and the
   // new popup window.
@@ -519,7 +519,7 @@
   // Navigate() should have opened a new normal popup window.
   EXPECT_NE(params1.browser, params2.browser);
   EXPECT_TRUE(params2.browser->is_type_popup());
-  EXPECT_FALSE(params2.browser->is_app());
+  EXPECT_FALSE(params2.browser->is_type_app());
 
   // We should have three windows, the browser() provided by the framework,
   // the first popup window, and the second popup window.
@@ -542,8 +542,8 @@
   // Navigate() should have opened a new popup app window.
   EXPECT_NE(app_browser, params.browser);
   EXPECT_NE(browser(), params.browser);
-  EXPECT_TRUE(params.browser->is_type_popup());
-  EXPECT_TRUE(params.browser->is_app());
+  EXPECT_FALSE(params.browser->is_type_popup());
+  EXPECT_TRUE(params.browser->is_type_app());
 
   // We should now have three windows, the app window, the app popup it created,
   // and the original browser() provided by the framework.
@@ -571,8 +571,8 @@
   // Navigate() should have opened a new popup app window.
   EXPECT_NE(browser(), params1.browser);
   EXPECT_NE(params1.browser, params2.browser);
-  EXPECT_TRUE(params2.browser->is_type_popup());
-  EXPECT_TRUE(params2.browser->is_app());
+  EXPECT_FALSE(params2.browser->is_type_popup());
+  EXPECT_TRUE(params2.browser->is_type_app());
 
   // We should now have four windows, the app window, the first app popup,
   // the second app popup, and the original browser() provided by the framework.
@@ -602,7 +602,7 @@
 
   // Navigate() should have opened a new, unfocused, popup window.
   EXPECT_NE(browser(), params.browser);
-  EXPECT_EQ(Browser::TYPE_POPUP, params.browser->type());
+  EXPECT_TRUE(params.browser->is_type_popup());
 #if 0
 // TODO(stevenjb): Enable this test. See: crbug.com/79493
   EXPECT_FALSE(p.browser->window()->IsActive());
@@ -635,7 +635,7 @@
 
   // Navigate() should have opened a new toplevel window.
   EXPECT_NE(browser(), params.browser);
-  EXPECT_TRUE(params.browser->is_type_tabbed());
+  EXPECT_TRUE(params.browser->is_type_normal());
 
   // We should now have two windows, the browser() provided by the framework and
   // the new normal window.
@@ -663,8 +663,8 @@
   Navigate(&params);
 
   EXPECT_NE(browser(), params.browser);
-  EXPECT_FALSE(params.browser->is_type_tabbed());
-  EXPECT_TRUE(params.browser->is_app());
+  EXPECT_FALSE(params.browser->is_type_normal());
+  EXPECT_TRUE(params.browser->is_type_app());
   EXPECT_TRUE(params.browser->is_trusted_source());
 }
 
@@ -1018,7 +1018,7 @@
 // reuses an existing incognito window when possible.
 IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_IncognitoRefocus) {
   Browser* incognito_browser = CreateEmptyBrowserForType(
-      Browser::TYPE_TABBED, browser()->profile()->GetOffTheRecordProfile());
+      Browser::TYPE_NORMAL, browser()->profile()->GetOffTheRecordProfile());
   NavigateParams params(MakeNavigateParams());
   params.disposition = WindowOpenDisposition::OFF_THE_RECORD;
   Navigate(&params);
@@ -1076,7 +1076,7 @@
   // Navigate() should have opened a new popup window.
   EXPECT_NE(browser(), params.browser);
   EXPECT_TRUE(params.browser->is_type_popup());
-  EXPECT_FALSE(params.browser->is_app());
+  EXPECT_FALSE(params.browser->is_type_app());
 
   // The web platform is weird. The window bounds specified in
   // |params.window_bounds| are used as follows:
diff --git a/chrome/browser/ui/browser_window_state.cc b/chrome/browser/ui/browser_window_state.cc
index aace100..9c638d5 100644
--- a/chrome/browser/ui/browser_window_state.cc
+++ b/chrome/browser/ui/browser_window_state.cc
@@ -77,8 +77,8 @@
 
 std::string GetWindowName(const Browser* browser) {
   if (browser->app_name().empty()) {
-    return browser->is_type_popup() ? prefs::kBrowserWindowPlacementPopup
-                                    : prefs::kBrowserWindowPlacement;
+    return browser->is_type_normal() ? prefs::kBrowserWindowPlacement
+                                     : prefs::kBrowserWindowPlacementPopup;
   }
   return browser->app_name();
 }
@@ -114,9 +114,7 @@
 bool ShouldSaveWindowPlacement(const Browser* browser) {
   // Only save the window placement of popups if the window is from a trusted
   // source (v1 app, devtools, or system window).
-  return (browser->type() == Browser::TYPE_TABBED) ||
-         ((browser->type() == Browser::TYPE_POPUP) &&
-          browser->is_trusted_source());
+  return (browser->is_type_normal() || browser->is_trusted_source());
 }
 
 bool SavedBoundsAreContentBounds(const Browser* browser) {
@@ -124,12 +122,12 @@
   // Web apps, on the other hand, have the same behavior as popups, and save
   // their content bounds.
   bool is_app_with_window_bounds =
-      browser->is_app() &&
+      browser->deprecated_is_app() &&
       !web_app::AppBrowserController::IsForWebAppBrowser(browser);
 
   // Pop ups such as devtools should behave as per other windows with persisted
   // sizes - treating the saved bounds as window bounds.
-  return browser->is_type_popup() && !is_app_with_window_bounds &&
+  return !browser->is_type_normal() && !is_app_with_window_bounds &&
          !browser->is_trusted_source();
 }
 
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc
index 6650862..a9baa6b 100644
--- a/chrome/browser/ui/chrome_pages.cc
+++ b/chrome/browser/ui/chrome_pages.cc
@@ -360,7 +360,7 @@
 
 bool IsTrustedPopupWindowWithScheme(const Browser* browser,
                                     const std::string& scheme) {
-  if (!browser->is_type_popup() || !browser->is_trusted_source())
+  if (browser->is_type_normal() || !browser->is_trusted_source())
     return false;
   if (scheme.empty())  // Any trusted popup window
     return true;
diff --git a/chrome/browser/ui/cocoa/apps/quit_with_apps_controller_mac.cc b/chrome/browser/ui/cocoa/apps/quit_with_apps_controller_mac.cc
index 4c3a684..a275371 100644
--- a/chrome/browser/ui/cocoa/apps/quit_with_apps_controller_mac.cc
+++ b/chrome/browser/ui/cocoa/apps/quit_with_apps_controller_mac.cc
@@ -135,7 +135,7 @@
   if (hosted_app_quit_notification_) {
     bool hosted_apps_open = false;
     for (Browser* browser : *BrowserList::GetInstance()) {
-      if (!browser->is_app())
+      if (!browser->deprecated_is_app())
         continue;
 
       ExtensionRegistry* registry = ExtensionRegistry::Get(browser->profile());
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc
index 899c38b..b5baf44 100644
--- a/chrome/browser/ui/extensions/application_launch.cc
+++ b/chrome/browser/ui/extensions/application_launch.cc
@@ -202,7 +202,7 @@
     // TODO(erg): AppLaunchParams should pass user_gesture from the extension
     // system to here.
     browser =
-        new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile, true));
+        new Browser(Browser::CreateParams(Browser::TYPE_NORMAL, profile, true));
     browser->window()->Show();
     // There's no current tab in this browser window, so add a new one.
     disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB;
diff --git a/chrome/browser/ui/extensions/application_launch_browsertest.cc b/chrome/browser/ui/extensions/application_launch_browsertest.cc
index e3adf3a..2d0fa5a 100644
--- a/chrome/browser/ui/extensions/application_launch_browsertest.cc
+++ b/chrome/browser/ui/extensions/application_launch_browsertest.cc
@@ -33,7 +33,7 @@
 
   Browser* app_browser =
       ReparentWebContentsForFocusMode(GetWebContentsForTab(browser(), 0));
-  EXPECT_TRUE(app_browser->is_app());
+  EXPECT_TRUE(app_browser->is_type_app());
   EXPECT_NE(app_browser, browser());
 
   content::WebContents* main_browser_web_contents =
@@ -59,7 +59,7 @@
 
   Browser* app_browser =
       ReparentWebContentsForFocusMode(GetWebContentsForTab(browser(), 1));
-  EXPECT_TRUE(app_browser->is_app());
+  EXPECT_TRUE(app_browser->is_type_app());
   EXPECT_NE(app_browser, browser());
   EXPECT_EQ(url, GetWebContentsForTab(app_browser, 0)->GetURL());
   EXPECT_EQ(2, browser()->tab_strip_model()->count());
diff --git a/chrome/browser/ui/extensions/extension_message_bubble_bridge_unittest.cc b/chrome/browser/ui/extensions/extension_message_bubble_bridge_unittest.cc
index 4959897..cf1b21a 100644
--- a/chrome/browser/ui/extensions/extension_message_bubble_bridge_unittest.cc
+++ b/chrome/browser/ui/extensions/extension_message_bubble_bridge_unittest.cc
@@ -67,7 +67,7 @@
 
     browser_window_.reset(new TestBrowserWindow());
     Browser::CreateParams params(profile(), true);
-    params.type = Browser::TYPE_TABBED;
+    params.type = Browser::TYPE_NORMAL;
     params.window = browser_window_.get();
     browser_.reset(new Browser(params));
 
diff --git a/chrome/browser/ui/extensions/hosted_app_browsertest.cc b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
index 07d7abde..0af72f5 100644
--- a/chrome/browser/ui/extensions/hosted_app_browsertest.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
@@ -1024,7 +1024,7 @@
   ASSERT_TRUE(https_server()->Start());
 
   InstallSecurePWA();
-  ASSERT_TRUE(app_browser_->is_app());
+  ASSERT_TRUE(app_browser_->is_type_app());
   app_browser_->window()->Close();
 
   content::WebContentsAddedObserver new_contents_observer;
@@ -1038,7 +1038,7 @@
   Browser* restored_browser =
       chrome::FindBrowserWithWebContents(restored_web_contents);
 
-  EXPECT_TRUE(restored_browser->is_app());
+  EXPECT_TRUE(restored_browser->is_type_app());
 }
 
 // Tests that app windows are restored in a tab if the app is uninstalled.
@@ -1047,8 +1047,8 @@
   ASSERT_TRUE(https_server()->Start());
 
   InstallSecurePWA();
-  ASSERT_TRUE(app_browser_->is_app());
-  ASSERT_FALSE(app_browser_->is_type_tabbed());
+  ASSERT_TRUE(app_browser_->is_type_app());
+  ASSERT_FALSE(app_browser_->is_type_normal());
   app_browser_->window()->Close();
 
   extensions::TestExtensionRegistryObserver test_observer(
@@ -1067,8 +1067,8 @@
   Browser* restored_browser =
       chrome::FindBrowserWithWebContents(restored_web_contents);
 
-  EXPECT_FALSE(restored_browser->is_app());
-  EXPECT_TRUE(restored_browser->is_type_tabbed());
+  EXPECT_FALSE(restored_browser->is_type_app());
+  EXPECT_TRUE(restored_browser->is_type_normal());
 }
 
 // Test navigating to an out of scope url on the same origin causes the url
diff --git a/chrome/browser/ui/hats/hats_service.cc b/chrome/browser/ui/hats/hats_service.cc
index 5ae0770..b63f893 100644
--- a/chrome/browser/ui/hats/hats_service.cc
+++ b/chrome/browser/ui/hats/hats_service.cc
@@ -88,7 +88,7 @@
   if (ShouldShowSurvey(kHatsSurveyTriggerSatisfaction)) {
     Browser* browser = chrome::FindLastActive();
     // Never show HaTS bubble in Incognito mode.
-    if (browser && browser->is_type_tabbed() &&
+    if (browser && browser->is_type_normal() &&
         profiles::IsRegularOrGuestSession(browser)) {
       browser->window()->ShowHatsBubble(en_site_id_);
 
diff --git a/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc b/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc
index 65e4c979..b81d8d7 100644
--- a/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc
+++ b/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc
@@ -348,7 +348,7 @@
 #if !defined(OS_ANDROID)
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
   if (browser) {
-    browser_is_app = browser->is_app();
+    browser_is_app = browser->deprecated_is_app();
   }
 #endif
   return AppModalDialogManager()->RunBeforeUnloadDialogWithOptions(
diff --git a/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.cc b/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.cc
index 5368ce4c..94f17b6 100644
--- a/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.cc
+++ b/chrome/browser/ui/permission_bubble/permission_bubble_browser_test_util.cc
@@ -71,7 +71,7 @@
 
   Browser* app_browser = chrome::FindBrowserWithWebContents(app_window);
   CHECK(app_browser);
-  CHECK(app_browser->is_app());
+  CHECK(app_browser->is_type_app());
 
   return app_browser;
 }
diff --git a/chrome/browser/ui/startup/default_browser_prompt.cc b/chrome/browser/ui/startup/default_browser_prompt.cc
index 3d6db12..f87627d60d 100644
--- a/chrome/browser/ui/startup/default_browser_prompt.cc
+++ b/chrome/browser/ui/startup/default_browser_prompt.cc
@@ -54,7 +54,7 @@
 
     // |browser| may be null in UI tests. Also, don't show the prompt in an app
     // window, which is not meant to be treated as a Chrome window.
-    if (!browser || browser->is_app())
+    if (!browser || browser->deprecated_is_app())
       continue;
 
     // In ChromeBot tests, there might be a race. This line appears to get
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
index 0c012dee..873fb59 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -347,7 +347,7 @@
   ASSERT_TRUE(new_browser);
 
   // The new window should be an app window.
-  EXPECT_TRUE(new_browser->is_app());
+  EXPECT_TRUE(new_browser->is_type_app());
 
   TabStripModel* tab_strip = new_browser->tab_strip_model();
   ASSERT_EQ(1, tab_strip->count());
@@ -389,8 +389,8 @@
   EXPECT_EQ(tab_strip->GetActiveWebContents(), tab_strip->GetWebContentsAt(1));
 
   // It should be a standard tabbed window, not an app window.
-  EXPECT_FALSE(browser()->is_app());
-  EXPECT_TRUE(browser()->is_type_tabbed());
+  EXPECT_FALSE(browser()->is_type_app());
+  EXPECT_TRUE(browser()->is_type_normal());
 }
 
 IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorTest, OpenAppShortcutWindowPref) {
@@ -414,7 +414,7 @@
   ASSERT_TRUE(new_browser);
 
   // Expect an app window.
-  EXPECT_TRUE(new_browser->is_app());
+  EXPECT_TRUE(new_browser->is_type_app());
 
   // The browser's app_name should include the app's ID.
   EXPECT_NE(
@@ -651,14 +651,14 @@
 
   // Open some urls with the browsers, and close them.
   Browser* browser1 =
-      new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile1, true));
+      new Browser(Browser::CreateParams(Browser::TYPE_NORMAL, profile1, true));
   chrome::NewTab(browser1);
   ui_test_utils::NavigateToURL(browser1,
                                embedded_test_server()->GetURL("/empty.html"));
   CloseBrowserSynchronously(browser1);
 
   Browser* browser2 =
-      new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile2, true));
+      new Browser(Browser::CreateParams(Browser::TYPE_NORMAL, profile2, true));
   chrome::NewTab(browser2);
   ui_test_utils::NavigateToURL(browser2,
                                embedded_test_server()->GetURL("/form.html"));
@@ -795,7 +795,7 @@
 
   // Open a page with profile_last.
   Browser* browser_last = new Browser(
-      Browser::CreateParams(Browser::TYPE_TABBED, profile_last, true));
+      Browser::CreateParams(Browser::TYPE_NORMAL, profile_last, true));
   chrome::NewTab(browser_last);
   ui_test_utils::NavigateToURL(browser_last,
                                embedded_test_server()->GetURL("/empty.html"));
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
index 9ca60ea0..1c513efb 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -460,7 +460,7 @@
   if (!profile_ && browser)
     profile_ = browser->profile();
 
-  if (!browser || !browser->is_type_tabbed()) {
+  if (!browser || !browser->is_type_normal()) {
     // Startup browsers are not counted as being created by a user_gesture
     // because of historical accident, even though the startup browser was
     // created in response to the user clicking on chrome. There was an
diff --git a/chrome/browser/ui/startup/startup_tab_provider.cc b/chrome/browser/ui/startup/startup_tab_provider.cc
index 72cde14..68345e0 100644
--- a/chrome/browser/ui/startup/startup_tab_provider.cc
+++ b/chrome/browser/ui/startup/startup_tab_provider.cc
@@ -35,7 +35,7 @@
   BrowserList* browser_list = BrowserList::GetInstance();
   auto other_tabbed_browser = std::find_if(
       browser_list->begin(), browser_list->end(), [profile](Browser* browser) {
-        return browser->profile() == profile && browser->is_type_tabbed() &&
+        return browser->profile() == profile && browser->is_type_normal() &&
                !browser->tab_strip_model()->empty();
       });
   return other_tabbed_browser != browser_list->end();
diff --git a/chrome/browser/ui/sync/browser_synced_window_delegate.cc b/chrome/browser/ui/sync/browser_synced_window_delegate.cc
index 0c0de07..c423c34 100644
--- a/chrome/browser/ui/sync/browser_synced_window_delegate.cc
+++ b/chrome/browser/ui/sync/browser_synced_window_delegate.cc
@@ -54,12 +54,8 @@
   return browser_->tab_strip_model()->active_index();
 }
 
-bool BrowserSyncedWindowDelegate::IsApp() const {
-  return browser_->is_app();
-}
-
-bool BrowserSyncedWindowDelegate::IsTypeTabbed() const {
-  return browser_->is_type_tabbed();
+bool BrowserSyncedWindowDelegate::IsTypeNormal() const {
+  return browser_->is_type_normal();
 }
 
 bool BrowserSyncedWindowDelegate::IsTypePopup() const {
@@ -71,7 +67,5 @@
 }
 
 bool BrowserSyncedWindowDelegate::ShouldSync() const {
-  if (IsApp())
-    return false;
-  return IsTypeTabbed() || IsTypePopup();
+  return IsTypeNormal() || IsTypePopup();
 }
diff --git a/chrome/browser/ui/sync/browser_synced_window_delegate.h b/chrome/browser/ui/sync/browser_synced_window_delegate.h
index 6079af2..4a9bafc 100644
--- a/chrome/browser/ui/sync/browser_synced_window_delegate.h
+++ b/chrome/browser/ui/sync/browser_synced_window_delegate.h
@@ -29,8 +29,7 @@
   SessionID GetSessionId() const override;
   int GetTabCount() const override;
   int GetActiveIndex() const override;
-  bool IsApp() const override;
-  bool IsTypeTabbed() const override;
+  bool IsTypeNormal() const override;
   bool IsTypePopup() const override;
   bool IsTabPinned(const sync_sessions::SyncedTabDelegate* tab) const override;
   sync_sessions::SyncedTabDelegate* GetTabAt(int index) const override;
diff --git a/chrome/browser/ui/tabs/pinned_tab_codec.cc b/chrome/browser/ui/tabs/pinned_tab_codec.cc
index a012aedd..ce2a5c2 100644
--- a/chrome/browser/ui/tabs/pinned_tab_codec.cc
+++ b/chrome/browser/ui/tabs/pinned_tab_codec.cc
@@ -93,8 +93,8 @@
 
   base::ListValue values;
   for (auto* browser : *BrowserList::GetInstance()) {
-    if (browser->is_type_tabbed() &&
-        browser->profile() == profile && HasPinnedTabs(browser)) {
+    if (browser->is_type_normal() && browser->profile() == profile &&
+        HasPinnedTabs(browser)) {
       EncodePinnedTabs(browser, &values);
     }
   }
diff --git a/chrome/browser/ui/tabs/pinned_tab_service.cc b/chrome/browser/ui/tabs/pinned_tab_service.cc
index cf103eb2..43a9890 100644
--- a/chrome/browser/ui/tabs/pinned_tab_service.cc
+++ b/chrome/browser/ui/tabs/pinned_tab_service.cc
@@ -46,7 +46,7 @@
 }
 
 void PinnedTabService::OnBrowserAdded(Browser* browser) {
-  if (browser->profile() != profile_ || !browser->is_type_tabbed())
+  if (browser->profile() != profile_ || !browser->is_type_normal())
     return;
 
   need_to_write_pinned_tabs_ = true;
@@ -54,7 +54,7 @@
 }
 
 void PinnedTabService::OnBrowserClosing(Browser* browser) {
-  if (browser->profile() != profile_ || !browser->is_type_tabbed())
+  if (browser->profile() != profile_ || !browser->is_type_normal())
     return;
 
   if (TabStripModelObserver::CountObservedModels(this) == 1)
@@ -62,7 +62,7 @@
 }
 
 void PinnedTabService::OnBrowserRemoved(Browser* browser) {
-  if (browser->profile() != profile_ || !browser->is_type_tabbed())
+  if (browser->profile() != profile_ || !browser->is_type_normal())
     return;
 
   browser->tab_strip_model()->RemoveObserver(this);
diff --git a/chrome/browser/ui/toolbar/media_router_contextual_menu_unittest.cc b/chrome/browser/ui/toolbar/media_router_contextual_menu_unittest.cc
index b61aa52..f21fb207 100644
--- a/chrome/browser/ui/toolbar/media_router_contextual_menu_unittest.cc
+++ b/chrome/browser/ui/toolbar/media_router_contextual_menu_unittest.cc
@@ -167,7 +167,7 @@
 
   std::unique_ptr<BrowserWindow> window(CreateBrowserWindow());
   std::unique_ptr<Browser> incognito_browser(
-      CreateBrowser(profile()->GetOffTheRecordProfile(), Browser::TYPE_TABBED,
+      CreateBrowser(profile()->GetOffTheRecordProfile(), Browser::TYPE_NORMAL,
                     false, window.get()));
 
   MediaRouterContextualMenu incognito_menu(incognito_browser.get(),
diff --git a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc
index 407e1c58..105aeed 100644
--- a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc
+++ b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc
@@ -285,8 +285,7 @@
                                            base::WrapUnique(session_service));
   SessionID tab_id = SessionID::FromSerializedValue(1);
   SessionID window_id = SessionID::FromSerializedValue(2);
-  session_service->SetWindowType(window_id,
-                                 Browser::TYPE_TABBED,
+  session_service->SetWindowType(window_id, Browser::TYPE_NORMAL,
                                  SessionService::TYPE_NORMAL);
   session_service->SetTabWindow(window_id, tab_id);
   session_service->SetTabIndexInWindow(window_id, tab_id, 0);
diff --git a/chrome/browser/ui/uma_browsing_activity_observer.cc b/chrome/browser/ui/uma_browsing_activity_observer.cc
index 3c21131..aa50aa6 100644
--- a/chrome/browser/ui/uma_browsing_activity_observer.cc
+++ b/chrome/browser/ui/uma_browsing_activity_observer.cc
@@ -123,11 +123,11 @@
                                   50);
     }
 
-    if (browser->is_app())
+    if (browser->deprecated_is_app())
       app_window_count++;
     else if (browser->is_type_popup())
       popup_window_count++;
-    else if (browser->is_type_tabbed())
+    else if (browser->is_type_normal())
       tabbed_window_count++;
   }
   // Record how many tabs total are open (across all windows).
diff --git a/chrome/browser/ui/unload_controller.cc b/chrome/browser/ui/unload_controller.cc
index e736aab..4f9e09a8 100644
--- a/chrome/browser/ui/unload_controller.cc
+++ b/chrome/browser/ui/unload_controller.cc
@@ -70,7 +70,7 @@
   // Special case for when we quit an application. The devtools window can
   // close if it's beforeunload event has already fired which will happen due
   // to the interception of it's content's beforeunload.
-  if (browser_->is_devtools() &&
+  if (browser_->is_type_devtools() &&
       DevToolsWindow::HasFiredBeforeUnloadEventForDevToolsBrowser(browser_))
     return false;
 
@@ -134,7 +134,7 @@
   // Special case for when we quit an application. The devtools window can
   // close if it's beforeunload event has already fired which will happen due
   // to the interception of it's content's beforeunload.
-  if (browser_->is_devtools() &&
+  if (browser_->is_type_devtools() &&
       DevToolsWindow::HasFiredBeforeUnloadEventForDevToolsBrowser(browser_)) {
     return true;
   }
@@ -170,7 +170,7 @@
   // The devtools browser gets its beforeunload events as the results of
   // intercepting events from the inspected tab, so don't send them here as
   // well.
-  if (browser_->is_devtools() || HasCompletedUnloadProcessing() ||
+  if (browser_->is_type_devtools() || HasCompletedUnloadProcessing() ||
       !TabsNeedBeforeUnloadFired())
     return false;
 
diff --git a/chrome/browser/ui/views/desktop_capture/desktop_media_list_view.cc b/chrome/browser/ui/views/desktop_capture/desktop_media_list_view.cc
index 28ea65d..1d3ab29e 100644
--- a/chrome/browser/ui/views/desktop_capture/desktop_media_list_view.cc
+++ b/chrome/browser/ui/views/desktop_capture/desktop_media_list_view.cc
@@ -42,7 +42,7 @@
   // windows without Browser association as apps.
   // Technically dev tool is actually a special app, but we would like to
   // display product logo for it, because intuitively it is internal to browser.
-  bool is_app = !browser || (browser->is_app() && !browser->is_devtools());
+  bool is_app = !browser || browser->is_type_app();
   int idr = is_app ? IDR_APP_DEFAULT_ICON : IDR_PRODUCT_LOGO_32;
 
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
diff --git a/chrome/browser/ui/views/frame/browser_frame.cc b/chrome/browser/ui/views/frame/browser_frame.cc
index 881bdbc..362c6e1 100644
--- a/chrome/browser/ui/views/frame/browser_frame.cc
+++ b/chrome/browser/ui/views/frame/browser_frame.cc
@@ -82,8 +82,8 @@
   views::Widget::InitParams params = native_browser_frame_->GetWidgetParams();
   params.name = "BrowserFrame";
   params.delegate = browser_view_;
-  if (browser_view_->browser()->is_type_tabbed() ||
-      browser_view_->browser()->is_devtools()) {
+  if (browser_view_->browser()->is_type_normal() ||
+      browser_view_->browser()->is_type_devtools()) {
     // Typed panel/popup can only return a size once the widget has been
     // created.
     // DevTools counts as a popup, but DevToolsWindow::CreateDevToolsBrowser
diff --git a/chrome/browser/ui/views/frame/browser_frame_ash.cc b/chrome/browser/ui/views/frame/browser_frame_ash.cc
index d4391bed..b1f53124 100644
--- a/chrome/browser/ui/views/frame/browser_frame_ash.cc
+++ b/chrome/browser/ui/views/frame/browser_frame_ash.cc
@@ -82,7 +82,7 @@
   // For legacy reasons v1 apps (like Secure Shell) are allowed to consume keys
   // like brightness, volume, etc. Otherwise these keys are handled by the
   // Ash window manager.
-  window_state->SetCanConsumeSystemKeys(browser->is_app());
+  window_state->SetCanConsumeSystemKeys(browser->deprecated_is_app());
 }
 
 void BrowserFrameAsh::OnBoundsChanged(const gfx::Rect& old_bounds,
@@ -170,6 +170,6 @@
 void BrowserFrameAsh::SetWindowAutoManaged() {
   // For browser window in Chrome OS, we should only enable the auto window
   // management logic for tabbed browser.
-  if (!browser_view_->browser()->is_type_popup())
+  if (browser_view_->browser()->is_type_normal())
     GetNativeWindow()->SetProperty(ash::kWindowPositionManagedTypeKey, true);
 }
diff --git a/chrome/browser/ui/views/frame/browser_frame_mac.mm b/chrome/browser/ui/views/frame/browser_frame_mac.mm
index a9f6fb7..4be6761 100644
--- a/chrome/browser/ui/views/frame/browser_frame_mac.mm
+++ b/chrome/browser/ui/views/frame/browser_frame_mac.mm
@@ -196,7 +196,7 @@
       // Hide this menu option if the window is tabbed or is the devtools
       // window.
       result->new_hidden_state =
-          browser->is_type_tabbed() || browser->is_devtools();
+          browser->is_type_normal() || browser->is_type_devtools();
       break;
     }
     case IDC_ROUTE_MEDIA: {
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
index e5163c0..c60ec72e 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
@@ -102,8 +102,8 @@
 // the header used for packaged apps.
 bool UsePackagedAppHeaderStyle(const Browser* browser) {
   // Use for non tabbed trusted source windows, e.g. Settings, as well as apps.
-  return (!browser->is_type_tabbed() && browser->is_trusted_source()) ||
-         browser->is_app();
+  return (!browser->is_type_normal() && browser->is_trusted_source()) ||
+         browser->deprecated_is_app();
 }
 
 }  // namespace
@@ -152,8 +152,8 @@
   aura::Window* window = frame()->GetNativeWindow();
   window->SetProperty(
       aura::client::kAppType,
-      static_cast<int>(browser->is_app() ? ash::AppType::CHROME_APP
-                                         : ash::AppType::BROWSER));
+      static_cast<int>(browser->deprecated_is_app() ? ash::AppType::CHROME_APP
+                                                    : ash::AppType::BROWSER));
 
   window_observer_.Add(GetFrameWindow());
 
@@ -164,7 +164,7 @@
 
   ash::TabletMode::Get()->AddObserver(this);
 
-  if (browser->is_app() && IsV1AppBackButtonEnabled()) {
+  if (browser->deprecated_is_app() && IsV1AppBackButtonEnabled()) {
     browser->command_controller()->AddCommandObserver(IDC_BACK, this);
     back_button_ = new ash::FrameBackButton();
     AddChildView(back_button_);
@@ -247,7 +247,7 @@
     inactive_color = GetFrameColor(kInactive);
   } else if (browser_view()->IsBrowserTypeHostedApp()) {
     active_color = browser_view()->browser()->app_controller()->GetThemeColor();
-  } else if (!browser_view()->browser()->is_app()) {
+  } else if (!browser_view()->browser()->deprecated_is_app()) {
     // TODO(crbug.com/836128): Remove when System Web Apps flag is removed, as
     // the above Hosted App branch will render the theme color.
     active_color =
@@ -564,7 +564,7 @@
 void BrowserNonClientFrameViewAsh::EnabledStateChangedForCommand(int id,
                                                                  bool enabled) {
   DCHECK_EQ(IDC_BACK, id);
-  DCHECK(browser_view()->browser()->is_app());
+  DCHECK(browser_view()->browser()->deprecated_is_app());
 
   if (back_button_)
     back_button_->SetEnabled(enabled);
@@ -750,7 +750,7 @@
   if (browser->profile()->IsIncognitoProfile())
     return false;
 
-  if (!browser->is_type_tabbed() && !browser->is_app())
+  if (browser->is_type_popup())
     return false;
 
   return MultiUserWindowManagerHelper::ShouldShowAvatar(
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
index 7881ecb..9d30b54 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
@@ -587,7 +587,7 @@
       browser()->profile(), true);
   params.initial_show_state = ui::SHOW_STATE_DEFAULT;
   Browser* browser = new Browser(params);
-  ASSERT_TRUE(browser->is_app());
+  ASSERT_TRUE(browser->is_type_app());
   BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
 
   ash::ImmersiveFullscreenControllerTestApi(
@@ -1430,7 +1430,7 @@
       browser()->profile(), true);
   params.initial_show_state = ui::SHOW_STATE_DEFAULT;
   Browser* browser = new Browser(params);
-  ASSERT_TRUE(browser->is_app());
+  ASSERT_TRUE(browser->is_type_app());
   browser->window()->Show();
 
   BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
index fb571f6..97437dd4 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac.mm
@@ -279,7 +279,7 @@
 
 gfx::Size BrowserNonClientFrameViewMac::GetMinimumSize() const {
   gfx::Size client_size = frame()->client_view()->GetMinimumSize();
-  if (browser_view()->browser()->is_type_tabbed())
+  if (browser_view()->browser()->is_type_normal())
     client_size.SetToMax(browser_view()->tabstrip()->GetMinimumSize());
 
   // macOS apps generally don't allow their windows to get shorter than a
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_unittest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_unittest.cc
index dbbfb42..6587564 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_unittest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_unittest.cc
@@ -64,7 +64,7 @@
     : public BrowserNonClientFrameViewTest {
  public:
   BrowserNonClientFrameViewTabbedTest()
-      : BrowserNonClientFrameViewTest(Browser::TYPE_TABBED) {}
+      : BrowserNonClientFrameViewTest(Browser::TYPE_NORMAL) {}
 };
 
 TEST_F(BrowserNonClientFrameViewTabbedTest, HitTestTabstrip) {
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index f564beb..19bd0b5 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -1653,7 +1653,7 @@
   // - If the |browser_| is not for an app, and the |accelerator| is associated
   //   with the browser, and it is not a reserved one, do nothing.
 
-  if (browser_->is_app()) {
+  if (browser_->deprecated_is_app()) {
     // Let all keys fall through to a v1 app's web content, even accelerators.
     // We don't use NOT_HANDLED_IS_SHORTCUT here. If we do that, the app
     // might not be able to see a subsequent Char event. See OnHandleInputEvent
@@ -1929,7 +1929,7 @@
     title = browser_->GetWindowTitleForCurrentTab(include_app_name);
 
   // Add the name of the browser, unless this is an app window.
-  if (!browser()->is_app()) {
+  if (browser()->is_type_normal() || browser()->is_type_popup()) {
     int message_id;
     switch (channel) {
       case version_info::Channel::CANARY:
@@ -2064,14 +2064,14 @@
 
 bool BrowserView::CanChangeWindowIcon() const {
   // The logic of this function needs to be same as GetWindowIcon().
-  if (browser_->is_devtools())
+  if (browser_->is_type_devtools())
     return false;
   if (browser_->app_controller())
     return true;
 #if defined(OS_CHROMEOS)
   // On ChromeOS, the tabbed browser always use a static image for the window
   // icon. See GetWindowIcon().
-  if (browser_->is_type_tabbed())
+  if (browser_->is_type_normal())
     return false;
 #endif
   return true;
@@ -2100,7 +2100,7 @@
 
 gfx::ImageSkia BrowserView::GetWindowIcon() {
   // Use the default icon for devtools.
-  if (browser_->is_devtools())
+  if (browser_->is_type_devtools())
     return gfx::ImageSkia();
 
   // Hosted apps always show their app icon.
@@ -2110,7 +2110,7 @@
 
 #if defined(OS_CHROMEOS)
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-  if (browser_->is_type_tabbed()) {
+  if (browser_->is_type_normal()) {
     return rb.GetImageNamed(IDR_CHROME_APP_ICON_192).AsImageSkia();
   }
   auto* window = GetNativeWindow();
@@ -2120,7 +2120,7 @@
     return rb.GetImageNamed(override_window_icon_resource_id).AsImageSkia();
 #endif
 
-  if (browser_->is_app() || browser_->is_type_popup())
+  if (browser_->deprecated_is_app())
     return browser_->GetCurrentPageIcon().AsImageSkia();
 
   return gfx::ImageSkia();
@@ -2663,7 +2663,7 @@
 }
 
 void BrowserView::LoadingAnimationCallback() {
-  if (browser_->is_type_tabbed()) {
+  if (browser_->is_type_normal()) {
     // Loading animations are shown in the tab for tabbed windows.  We check the
     // browser type instead of calling IsTabStripVisible() because the latter
     // will return false for fullscreen windows, but we still need to update
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index 48807de5..e6e8dab 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -247,9 +247,7 @@
 
   // Returns true if the Browser object associated with this BrowserView is a
   // tabbed-type window (i.e. a browser window, not an app or popup).
-  bool IsBrowserTypeNormal() const {
-    return browser_->is_type_tabbed();
-  }
+  bool IsBrowserTypeNormal() const { return browser_->is_type_normal(); }
 
   // Returns true if the Browser object associated with this BrowserView is a
   // for an installed hosted app.
diff --git a/chrome/browser/ui/views/frame/browser_view_layout.cc b/chrome/browser/ui/views/frame/browser_view_layout.cc
index 245a057..589c2e5 100644
--- a/chrome/browser/ui/views/frame/browser_view_layout.cc
+++ b/chrome/browser/ui/views/frame/browser_view_layout.cc
@@ -199,9 +199,9 @@
   // TODO(pkotwicz): Adjust the minimum height for the find bar.
 
   gfx::Size contents_size(contents_container_->GetMinimumSize());
-  contents_size.SetToMax(browser()->is_type_popup()
-                             ? kContentsMinimumSize
-                             : kMainBrowserContentsMinimumSize);
+  contents_size.SetToMax(browser()->is_type_normal()
+                             ? kMainBrowserContentsMinimumSize
+                             : kContentsMinimumSize);
 
   const int min_height =
       delegate_->GetTopInsetInBrowserView() + tabstrip_size.height() +
diff --git a/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc b/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc
index 5dff12bf..0fe28521 100644
--- a/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc
+++ b/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc
@@ -51,7 +51,7 @@
   // Set the app user model id for this application to that of the application
   // name. See http://crbug.com/7028.
   base::string16 app_id =
-      browser->is_app()
+      browser->deprecated_is_app()
           ? shell_integration::win::GetAppModelIdForProfile(
                 base::UTF8ToWide(browser->app_name()), profile->GetPath())
           : shell_integration::win::GetChromiumModelIdForProfile(
@@ -63,7 +63,7 @@
   ProfileShortcutManager* shortcut_manager = nullptr;
 
   // Apps set their relaunch details based on app's details.
-  if (browser->is_app()) {
+  if (browser->deprecated_is_app()) {
     ExtensionRegistry* registry = ExtensionRegistry::Get(profile);
     const extensions::Extension* extension = registry->GetExtensionById(
         web_app::GetAppIdFromApplicationName(browser->app_name()),
@@ -79,7 +79,7 @@
   if (profile_manager)
     shortcut_manager = profile_manager->profile_shortcut_manager();
 
-  if (!browser->is_app() && shortcut_manager &&
+  if (!browser->deprecated_is_app() && shortcut_manager &&
       profile->GetPrefs()->HasPrefPath(prefs::kProfileIconVersion)) {
     const base::FilePath& profile_path = profile->GetPath();
 
diff --git a/chrome/browser/ui/views/frame/desktop_browser_frame_aura_linux.cc b/chrome/browser/ui/views/frame/desktop_browser_frame_aura_linux.cc
index 57c6ad21..7e9c810 100644
--- a/chrome/browser/ui/views/frame/desktop_browser_frame_aura_linux.cc
+++ b/chrome/browser/ui/views/frame/desktop_browser_frame_aura_linux.cc
@@ -35,7 +35,7 @@
   // windows and e.g app windows.
   const Browser& browser = *browser_view()->browser();
   params.wm_class_name =
-      browser.is_app() && !browser.is_devtools()
+      browser.is_type_app()
           ? shell_integration_linux::GetWMClassFromAppName(browser.app_name())
           // This window is a hosted app or v1 packaged app.
           // NOTE: v2 packaged app windows are created by
@@ -44,7 +44,7 @@
   params.wm_class_class = shell_integration_linux::GetProgramClassClass();
   const char kX11WindowRoleBrowser[] = "browser";
   const char kX11WindowRolePopup[] = "pop-up";
-  params.wm_role_name = browser_view()->browser()->is_type_tabbed()
+  params.wm_role_name = browser_view()->browser()->is_type_normal()
                             ? std::string(kX11WindowRoleBrowser)
                             : std::string(kX11WindowRolePopup);
   params.remove_standard_frame = UseCustomFrame();
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
index 2ed88183..99742b03 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
@@ -72,7 +72,7 @@
   browser_view_->GetNativeWindow()->SetProperty(
       ash::kImmersiveWindowType,
       static_cast<int>(
-          browser_view_->browser()->is_app()
+          browser_view_->browser()->deprecated_is_app()
               ? ash::ImmersiveFullscreenController::WINDOW_TYPE_HOSTED_APP
               : ash::ImmersiveFullscreenController::WINDOW_TYPE_BROWSER));
 }
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc
index 21e8cb01..2289b8c9 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash_unittest.cc
@@ -32,7 +32,7 @@
 class ImmersiveModeControllerAshTest : public TestWithBrowserView {
  public:
   ImmersiveModeControllerAshTest()
-      : TestWithBrowserView(Browser::TYPE_TABBED) {}
+      : TestWithBrowserView(Browser::TYPE_NORMAL) {}
   ~ImmersiveModeControllerAshTest() override {}
 
   // TestWithBrowserView override:
diff --git a/chrome/browser/ui/views/frame/system_menu_model_builder.cc b/chrome/browser/ui/views/frame/system_menu_model_builder.cc
index 7f439450..9b6c99a 100644
--- a/chrome/browser/ui/views/frame/system_menu_model_builder.cc
+++ b/chrome/browser/ui/views/frame/system_menu_model_builder.cc
@@ -71,7 +71,7 @@
 void SystemMenuModelBuilder::BuildMenu(ui::SimpleMenuModel* model) {
   // We add the menu items in reverse order so that insertion_index never needs
   // to change.
-  if (browser()->is_type_tabbed())
+  if (browser()->is_type_normal())
     BuildSystemMenuForBrowserWindow(model);
   else
     BuildSystemMenuForAppOrPopupWindow(model);
@@ -111,7 +111,7 @@
   model->AddItemWithStringId(IDC_RELOAD, IDS_APP_MENU_RELOAD);
   if (!web_app::AppBrowserController::IsForWebAppBrowser(browser())) {
     model->AddSeparator(ui::NORMAL_SEPARATOR);
-    if (browser()->is_app())
+    if (browser()->deprecated_is_app())
       model->AddItemWithStringId(IDC_NEW_TAB, IDS_APP_MENU_NEW_WEB_PAGE);
     else
       model->AddItemWithStringId(IDC_SHOW_AS_TAB, IDS_SHOW_AS_TAB);
@@ -126,7 +126,7 @@
     model->AddSubMenuWithStringId(IDC_ZOOM_MENU, IDS_ZOOM_MENU,
                                   zoom_menu_contents_.get());
   }
-  if (browser()->is_app() && chrome::CanOpenTaskManager()) {
+  if (browser()->deprecated_is_app() && chrome::CanOpenTaskManager()) {
     model->AddSeparator(ui::NORMAL_SEPARATOR);
     model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
   }
diff --git a/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc b/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc
index bb91a65b..0d7fcc8 100644
--- a/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc
+++ b/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos_browsertest.cc
@@ -471,7 +471,7 @@
   Browser* browser = new Browser(params);
   AddBlankTabAndShow(browser);
 
-  ASSERT_TRUE(browser->is_app());
+  ASSERT_TRUE(browser->is_type_app());
 
   // No slide controller gets created for hosted apps.
   BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
diff --git a/chrome/browser/ui/views/hats/hats_browsertest.cc b/chrome/browser/ui/views/hats/hats_browsertest.cc
index 0a3ff7f..679022e6 100644
--- a/chrome/browser/ui/views/hats/hats_browsertest.cc
+++ b/chrome/browser/ui/views/hats/hats_browsertest.cc
@@ -16,7 +16,7 @@
 
   // DialogBrowserTest:
   void ShowUi(const std::string& name) override {
-    ASSERT_TRUE(browser()->is_type_tabbed());
+    ASSERT_TRUE(browser()->is_type_normal());
     BrowserView::GetBrowserViewForBrowser(InProcessBrowserTest::browser())
         ->ShowHatsBubble(std::string());
   }
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index aca86e9..edea627 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -249,7 +249,7 @@
 
     if (base::CommandLine::ForCurrentProcess()->HasSwitch(
             switches::kEnableDomDistiller) &&
-        !browser_->is_type_popup()) {
+        browser_->is_type_normal()) {
       params.types_enabled.push_back(PageActionIconType::kReaderMode);
     }
   }
diff --git a/chrome/browser/ui/views/relaunch_notification/relaunch_notification_controller_platform_impl_desktop.cc b/chrome/browser/ui/views/relaunch_notification/relaunch_notification_controller_platform_impl_desktop.cc
index 44d0fda8..bde75a6 100644
--- a/chrome/browser/ui/views/relaunch_notification/relaunch_notification_controller_platform_impl_desktop.cc
+++ b/chrome/browser/ui/views/relaunch_notification/relaunch_notification_controller_platform_impl_desktop.cc
@@ -40,7 +40,7 @@
   BrowserList* browser_list = BrowserList::GetInstance();
   const auto end = browser_list->end_last_active();
   for (auto scan = browser_list->begin_last_active(); scan != end; ++scan) {
-    if ((*scan)->is_type_tabbed())
+    if ((*scan)->is_type_normal())
       return *scan;
   }
   return nullptr;
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller.cc b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
index e2e7b93..71ffb47d 100644
--- a/chrome/browser/ui/views/tabs/tab_drag_controller.cc
+++ b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
@@ -1945,7 +1945,7 @@
 
   Profile* profile =
       Profile::FromBrowserContext(drag_data_[0].contents->GetBrowserContext());
-  Browser::CreateParams create_params(Browser::TYPE_TABBED, profile,
+  Browser::CreateParams create_params(Browser::TYPE_NORMAL, profile,
                                       /*user_gesture=*/true,
                                       /*in_tab_dragging=*/true);
   create_params.initial_bounds = new_bounds;
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc
index ccd1472e..4bf18220 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -929,6 +929,6 @@
 
 void ToolbarView::UpdateHomeButtonVisibility() {
   const bool show_home_button =
-      show_home_button_.GetValue() || browser_->is_app();
+      show_home_button_.GetValue() || browser_->deprecated_is_app();
   home_->SetVisible(show_home_button);
 }
diff --git a/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc b/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc
index 814f929..1cf8259 100644
--- a/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc
+++ b/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc
@@ -94,7 +94,7 @@
   DCHECK(extension);
 
   for (auto* browser : *BrowserList::GetInstance()) {
-    if (browser->profile() != profile || !browser->is_app())
+    if (browser->profile() != profile || !browser->deprecated_is_app())
       continue;
 
     const extensions::Extension* browser_extension =
diff --git a/chrome/browser/ui/webui/chrome_web_contents_handler.cc b/chrome/browser/ui/webui/chrome_web_contents_handler.cc
index 8d2a5e6..1b97ae6 100644
--- a/chrome/browser/ui/webui/chrome_web_contents_handler.cc
+++ b/chrome/browser/ui/webui/chrome_web_contents_handler.cc
@@ -43,7 +43,7 @@
     // TODO(erg): OpenURLParams should pass a user_gesture flag, pass it to
     // CreateParams, and pass the real value to nav_params below.
     browser =
-        new Browser(Browser::CreateParams(Browser::TYPE_TABBED, profile, true));
+        new Browser(Browser::CreateParams(Browser::TYPE_NORMAL, profile, true));
   }
   NavigateParams nav_params(browser, params.url, params.transition);
   nav_params.referrer = params.referrer;
@@ -88,7 +88,7 @@
   const bool browser_created = !browser;
   if (!browser) {
     browser = new Browser(
-        Browser::CreateParams(Browser::TYPE_TABBED, profile, user_gesture));
+        Browser::CreateParams(Browser::TYPE_NORMAL, profile, user_gesture));
   }
   NavigateParams params(browser, std::move(new_contents));
   params.source_contents = source;
diff --git a/chrome/browser/ui/window_sizer/window_sizer.cc b/chrome/browser/ui/window_sizer/window_sizer.cc
index 22c00880..67a1dba 100644
--- a/chrome/browser/ui/window_sizer/window_sizer.cc
+++ b/chrome/browser/ui/window_sizer/window_sizer.cc
@@ -101,7 +101,7 @@
       for (auto it = browser_list->begin_last_active();
            it != browser_list->end_last_active(); ++it) {
         Browser* last_active = *it;
-        if (last_active && last_active->is_type_tabbed()) {
+        if (last_active && last_active->is_type_normal()) {
           window = last_active->window();
           DCHECK(window);
           break;
@@ -350,11 +350,12 @@
     return ui::SHOW_STATE_DEFAULT;
 
   // Only tabbed browsers and dev tools use the command line.
-  bool use_command_line = browser_->is_type_tabbed() || browser_->is_devtools();
+  bool use_command_line =
+      browser_->is_type_normal() || browser_->is_type_devtools();
 
 #if defined(USE_AURA)
   // We use the apps save state as well on aura.
-  use_command_line = use_command_line || browser_->is_app();
+  use_command_line = use_command_line || browser_->deprecated_is_app();
 #endif
 
   if (use_command_line && base::CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/chrome/browser/ui/window_sizer/window_sizer_ash.cc b/chrome/browser/ui/window_sizer/window_sizer_ash.cc
index efde9b9..5a47c92 100644
--- a/chrome/browser/ui/window_sizer/window_sizer_ash.cc
+++ b/chrome/browser/ui/window_sizer/window_sizer_ash.cc
@@ -46,7 +46,7 @@
 
   bool determined = false;
   if (bounds->IsEmpty()) {
-    if (browser_->is_type_tabbed()) {
+    if (browser_->is_type_normal()) {
       GetTabbedBrowserBoundsAsh(bounds, show_state);
       determined = true;
     } else if (browser_->is_trusted_source()) {
@@ -64,7 +64,7 @@
     }
   }
 
-  if (browser_->is_type_tabbed() && *show_state == ui::SHOW_STATE_DEFAULT) {
+  if (browser_->is_type_normal() && *show_state == ui::SHOW_STATE_DEFAULT) {
     display::Display display =
         display::Screen::GetScreen()->GetDisplayMatching(*bounds);
     gfx::Rect work_area = display.work_area();
@@ -87,7 +87,7 @@
     ui::WindowShowState* show_state) const {
   DCHECK(show_state);
   DCHECK(bounds_in_screen);
-  DCHECK(browser_->is_type_tabbed());
+  DCHECK(browser_->is_type_normal());
   DCHECK(bounds_in_screen->IsEmpty());
 
   const ui::WindowShowState passed_show_state = *show_state;
diff --git a/chrome/browser/ui/window_sizer/window_sizer_ash_unittest.cc b/chrome/browser/ui/window_sizer/window_sizer_ash_unittest.cc
index 1ba34ee..42240769 100644
--- a/chrome/browser/ui/window_sizer/window_sizer_ash_unittest.cc
+++ b/chrome/browser/ui/window_sizer/window_sizer_ash_unittest.cc
@@ -113,7 +113,7 @@
   std::unique_ptr<Browser> browser =
       chrome::CreateBrowserWithAuraTestWindowForParams(base::WrapUnique(window),
                                                        params);
-  if (!browser->is_type_popup()) {
+  if (browser->is_type_normal()) {
     browser->window()->GetNativeWindow()->SetProperty(
         ash::kWindowPositionManagedTypeKey, true);
   }
@@ -567,7 +567,7 @@
   UpdateDisplay("1600x1200");
 
   // Creating a browser & window to play with.
-  Browser::CreateParams params(Browser::TYPE_TABBED, &profile_, true);
+  Browser::CreateParams params(Browser::TYPE_NORMAL, &profile_, true);
   auto browser = CreateWindowlessBrowser(params);
 
   // Create also a popup browser since that behaves different.
@@ -614,7 +614,7 @@
 }
 
 TEST_F(WindowSizerAshTest, TestShowStateOnTinyScreen) {
-  Browser::CreateParams params(Browser::TYPE_TABBED, &profile_, true);
+  Browser::CreateParams params(Browser::TYPE_NORMAL, &profile_, true);
   auto browser = CreateWindowlessBrowser(params);
 
   // In smaller screen resolutions we default to maximized if there is no other
@@ -632,7 +632,7 @@
   UpdateDisplay("1600x1200");
   // Creating a browser & window to play with.
 
-  Browser::CreateParams params(Browser::TYPE_TABBED, &profile_, true);
+  Browser::CreateParams params(Browser::TYPE_NORMAL, &profile_, true);
   auto browser = CreateWindowlessBrowser(params);
 
   // Create also a popup browser since that behaves slightly different for
diff --git a/chrome/browser/web_applications/extensions/install_manager_bookmark_app_browsertest.cc b/chrome/browser/web_applications/extensions/install_manager_bookmark_app_browsertest.cc
index edfb3310..e60ca93 100644
--- a/chrome/browser/web_applications/extensions/install_manager_bookmark_app_browsertest.cc
+++ b/chrome/browser/web_applications/extensions/install_manager_bookmark_app_browsertest.cc
@@ -112,7 +112,7 @@
 
   // Ensure the tab is reparented into dedicated app window.
   Browser* app_browser = chrome::FindBrowserWithWebContents(web_contents());
-  EXPECT_TRUE(app_browser->is_app());
+  EXPECT_TRUE(app_browser->is_type_app());
   EXPECT_NE(app_browser, browser());
 }
 
diff --git a/chrome/test/base/browser_with_test_window_test.h b/chrome/test/base/browser_with_test_window_test.h
index c0abdbf..43df0bf 100644
--- a/chrome/test/base/browser_with_test_window_test.h
+++ b/chrome/test/base/browser_with_test_window_test.h
@@ -96,7 +96,7 @@
             std::make_unique<content::TestBrowserThreadBundle>(
                 base::trait_helpers::Exclude<HostedApp, Browser::Type>::Filter(
                     args)...),
-            base::trait_helpers::GetEnum<Browser::Type, Browser::TYPE_TABBED>(
+            base::trait_helpers::GetEnum<Browser::Type, Browser::TYPE_NORMAL>(
                 args...),
             base::trait_helpers::HasTrait<HostedApp>(args...)) {}
 
diff --git a/components/sessions/core/session_types.cc b/components/sessions/core/session_types.cc
index 3c83c4f..eb4db88 100644
--- a/components/sessions/core/session_types.cc
+++ b/components/sessions/core/session_types.cc
@@ -35,7 +35,7 @@
 SessionWindow::SessionWindow()
     : window_id(SessionID::NewUnique()),
       selected_tab_index(-1),
-      type(TYPE_TABBED),
+      type(TYPE_NORMAL),
       is_constrained(true),
       show_state(ui::SHOW_STATE_DEFAULT) {}
 
diff --git a/components/sessions/core/session_types.h b/components/sessions/core/session_types.h
index 14864bf..426c42d 100644
--- a/components/sessions/core/session_types.h
+++ b/components/sessions/core/session_types.h
@@ -131,10 +131,9 @@
 
   // Possible window types which can be stored here. Note that these values will
   // be written out to disc via session commands.
-  enum WindowType {
-    TYPE_TABBED = 0,
-    TYPE_POPUP = 1
-  };
+  // TODO(crbug.com/990158): Add types for TYPE_APP and TYPE_DEVTOOLS to match
+  // updated Browser::Type.
+  enum WindowType { TYPE_NORMAL = 0, TYPE_POPUP = 1 };
 
   // Identifier of the window.
   SessionID window_id;
diff --git a/components/sync_sessions/local_session_event_handler_impl.cc b/components/sync_sessions/local_session_event_handler_impl.cc
index f2e81eed2..6951bea2 100644
--- a/components/sync_sessions/local_session_event_handler_impl.cc
+++ b/components/sync_sessions/local_session_event_handler_impl.cc
@@ -55,7 +55,7 @@
   for (const auto& window_iter_pair :
        delegates_getter->GetSyncedWindowDelegates()) {
     const SyncedWindowDelegate* window_delegate = window_iter_pair.second;
-    if (window_delegate->IsTypeTabbed() && IsWindowSyncable(*window_delegate)) {
+    if (window_delegate->IsTypeNormal() && IsWindowSyncable(*window_delegate)) {
       return true;
     }
   }
@@ -219,7 +219,7 @@
     if (found_tabs) {
       SyncedSessionWindow* synced_session_window =
           current_session->windows[window_id].get();
-      if (window_delegate->IsTypeTabbed()) {
+      if (window_delegate->IsTypeNormal()) {
         synced_session_window->window_type =
             sync_pb::SessionWindow_BrowserType_TYPE_TABBED;
       } else if (window_delegate->IsTypePopup()) {
diff --git a/components/sync_sessions/session_sync_test_helper.cc b/components/sync_sessions/session_sync_test_helper.cc
index 8d301b72..cb86ee6a 100644
--- a/components/sync_sessions/session_sync_test_helper.cc
+++ b/components/sync_sessions/session_sync_test_helper.cc
@@ -67,7 +67,7 @@
       FAIL();
     ASSERT_EQ(win_iter->size(), win_ptr->tabs.size());
     ASSERT_EQ(0, win_ptr->selected_tab_index);
-    ASSERT_EQ(sessions::SessionWindow::TYPE_TABBED, win_ptr->type);
+    ASSERT_EQ(sessions::SessionWindow::TYPE_NORMAL, win_ptr->type);
     int j = 0;
     for (auto tab_iter = (*win_iter).begin(); tab_iter != (*win_iter).end();
          ++tab_iter, ++j) {
diff --git a/components/sync_sessions/synced_session_tracker.cc b/components/sync_sessions/synced_session_tracker.cc
index ae74d64..4e2224c5 100644
--- a/components/sync_sessions/synced_session_tracker.cc
+++ b/components/sync_sessions/synced_session_tracker.cc
@@ -93,7 +93,7 @@
   if (specifics.has_browser_type()) {
     if (specifics.browser_type() ==
         sync_pb::SessionWindow_BrowserType_TYPE_TABBED) {
-      session_window->type = sessions::SessionWindow::TYPE_TABBED;
+      session_window->type = sessions::SessionWindow::TYPE_NORMAL;
     } else {
       // Note: custom tabs are treated like popup windows on restore, as you can
       // restore a custom tab on a platform that doesn't support them.
diff --git a/components/sync_sessions/synced_window_delegate.h b/components/sync_sessions/synced_window_delegate.h
index 28d2d6f5..1a78be8 100644
--- a/components/sync_sessions/synced_window_delegate.h
+++ b/components/sync_sessions/synced_window_delegate.h
@@ -33,11 +33,8 @@
   // see Browser::active_index
   virtual int GetActiveIndex() const = 0;
 
-  // see Browser::is_app
-  virtual bool IsApp() const = 0;
-
-  // see Browser::is_type_tabbed
-  virtual bool IsTypeTabbed() const = 0;
+  // see Browser::is_type_normal
+  virtual bool IsTypeNormal() const = 0;
 
   // see Browser::is_type_popup
   virtual bool IsTypePopup() const = 0;
diff --git a/components/sync_sessions/test_synced_window_delegates_getter.cc b/components/sync_sessions/test_synced_window_delegates_getter.cc
index 4b599e9..af19b3c8 100644
--- a/components/sync_sessions/test_synced_window_delegates_getter.cc
+++ b/components/sync_sessions/test_synced_window_delegates_getter.cc
@@ -337,11 +337,7 @@
   return 0;
 }
 
-bool TestSyncedWindowDelegate::IsApp() const {
-  return false;
-}
-
-bool TestSyncedWindowDelegate::IsTypeTabbed() const {
+bool TestSyncedWindowDelegate::IsTypeNormal() const {
   return window_type_ == sync_pb::SessionWindow_BrowserType_TYPE_TABBED;
 }
 
diff --git a/components/sync_sessions/test_synced_window_delegates_getter.h b/components/sync_sessions/test_synced_window_delegates_getter.h
index 5e84190..108df04 100644
--- a/components/sync_sessions/test_synced_window_delegates_getter.h
+++ b/components/sync_sessions/test_synced_window_delegates_getter.h
@@ -142,8 +142,7 @@
   SessionID GetSessionId() const override;
   int GetTabCount() const override;
   int GetActiveIndex() const override;
-  bool IsApp() const override;
-  bool IsTypeTabbed() const override;
+  bool IsTypeNormal() const override;
   bool IsTypePopup() const override;
   bool IsTabPinned(const SyncedTabDelegate* tab) const override;
   SyncedTabDelegate* GetTabAt(int index) const override;
diff --git a/ios/chrome/browser/tabs/tab_model_synced_window_delegate.h b/ios/chrome/browser/tabs/tab_model_synced_window_delegate.h
index 0c5f53e..c6c01db 100644
--- a/ios/chrome/browser/tabs/tab_model_synced_window_delegate.h
+++ b/ios/chrome/browser/tabs/tab_model_synced_window_delegate.h
@@ -34,8 +34,7 @@
   SessionID GetSessionId() const override;
   int GetTabCount() const override;
   int GetActiveIndex() const override;
-  bool IsApp() const override;
-  bool IsTypeTabbed() const override;
+  bool IsTypeNormal() const override;
   bool IsTypePopup() const override;
   bool IsTabPinned(const sync_sessions::SyncedTabDelegate* tab) const override;
   sync_sessions::SyncedTabDelegate* GetTabAt(int index) const override;
diff --git a/ios/chrome/browser/tabs/tab_model_synced_window_delegate.mm b/ios/chrome/browser/tabs/tab_model_synced_window_delegate.mm
index e1d233e..e9649e2 100644
--- a/ios/chrome/browser/tabs/tab_model_synced_window_delegate.mm
+++ b/ios/chrome/browser/tabs/tab_model_synced_window_delegate.mm
@@ -64,11 +64,7 @@
   return web_state_list_->active_index();
 }
 
-bool TabModelSyncedWindowDelegate::IsApp() const {
-  return false;
-}
-
-bool TabModelSyncedWindowDelegate::IsTypeTabbed() const {
+bool TabModelSyncedWindowDelegate::IsTypeNormal() const {
   return true;
 }