|  | // Copyright 2022 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "chrome/browser/ui/web_applications/web_app_tabbed_utils.h" | 
|  |  | 
|  | #include "chrome/browser/ui/browser.h" | 
|  | #include "chrome/browser/ui/tabs/tab_strip_model.h" | 
|  | #include "chrome/browser/ui/tabs/tab_strip_model_delegate.h" | 
|  | #include "chrome/browser/ui/web_applications/app_browser_controller.h" | 
|  |  | 
|  | namespace web_app { | 
|  |  | 
|  | bool HasPinnedHomeTab(const TabStripModel* tab_strip_model) { | 
|  | if (!tab_strip_model->ContainsIndex(0)) { | 
|  | return false; | 
|  | } | 
|  | return tab_strip_model->delegate()->IsForWebApp() && | 
|  | tab_strip_model->IsTabPinned(0); | 
|  | } | 
|  |  | 
|  | bool IsPinnedHomeTab(const TabStripModel* tab_strip_model, int index) { | 
|  | return HasPinnedHomeTab(tab_strip_model) && index == 0; | 
|  | } | 
|  |  | 
|  | bool IsTabClosable(const TabStripModel* tab_strip_model, int index) { | 
|  | return !IsPinnedHomeTab(tab_strip_model, index) || | 
|  | tab_strip_model->count() == 1; | 
|  | } | 
|  |  | 
|  | bool IsHomeTabUrl(const Browser* browser, const GURL& url) { | 
|  | return browser && browser->app_controller() && | 
|  | HasPinnedHomeTab(browser->tab_strip_model()) && | 
|  | browser->app_controller()->IsUrlInHomeTabScope(url); | 
|  | } | 
|  |  | 
|  | }  // namespace web_app |