| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/tabs/tab_title_util.h" |
| |
| #import <Foundation/Foundation.h> |
| |
| #import "base/strings/sys_string_conversions.h" |
| #import "components/strings/grit/components_strings.h" |
| #import "ios/chrome/browser/download/download_manager_tab_helper.h" |
| #import "ios/web/public/navigation/navigation_item.h" |
| #import "ios/web/public/navigation/navigation_manager.h" |
| #import "ios/web/public/web_state.h" |
| #import "ui/base/l10n/l10n_util.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| namespace tab_util { |
| namespace { |
| |
| // Returns whether `web_state` only has a download in-progress. |
| bool WebStateHasDownloadInProgress(const web::WebState* web_state) { |
| if (!web_state->IsRealized()) |
| return false; |
| |
| const web::NavigationManager* navigation_manager = |
| web_state->GetNavigationManager(); |
| if (!navigation_manager) |
| return false; |
| |
| if (navigation_manager->GetVisibleItem()) |
| return false; |
| |
| const DownloadManagerTabHelper* download_tab_helper = |
| DownloadManagerTabHelper::FromWebState(web_state); |
| if (!download_tab_helper) |
| return false; |
| |
| return download_tab_helper->has_download_task(); |
| } |
| |
| } |
| |
| NSString* GetTabTitle(const web::WebState* web_state) { |
| if (WebStateHasDownloadInProgress(web_state)) { |
| return l10n_util::GetNSString(IDS_DOWNLOAD_TAB_TITLE); |
| } |
| |
| const std::u16string& title = web_state->GetTitle(); |
| if (!title.empty()) |
| return base::SysUTF16ToNSString(title); |
| |
| return l10n_util::GetNSString(IDS_DEFAULT_TAB_TITLE); |
| } |
| |
| } // namespace tab_util |