blob: beafc3cec30ecafeb7007ac427782a8a6046ed0f [file] [log] [blame]
// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ios/chrome/browser/ui/toolbar/toolbar_model_impl_ios.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/toolbar/toolbar_model_impl.h"
#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/chrome_url_constants.h"
#import "ios/chrome/browser/tabs/legacy_tab_helper.h"
#include "ios/chrome/browser/tabs/tab.h"
#include "ios/chrome/browser/ui/toolbar/toolbar_model_delegate_ios.h"
#import "ios/web/public/web_state/web_state.h"
namespace {
const size_t kMaxURLDisplayChars = 32 * 1024;
bookmarks::BookmarkModel* GetBookmarkModelForWebState(
web::WebState* web_state) {
if (!web_state)
return nullptr;
web::BrowserState* browser_state = web_state->GetBrowserState();
if (!browser_state)
return nullptr;
return ios::BookmarkModelFactory::GetForBrowserState(
ios::ChromeBrowserState::FromBrowserState(browser_state));
}
} // namespace
ToolbarModelImplIOS::ToolbarModelImplIOS(ToolbarModelDelegateIOS* delegate) {
delegate_ = delegate;
toolbar_model_.reset(new ToolbarModelImpl(delegate, kMaxURLDisplayChars));
}
ToolbarModelImplIOS::~ToolbarModelImplIOS() {}
ToolbarModel* ToolbarModelImplIOS::GetToolbarModel() {
return toolbar_model_.get();
}
bool ToolbarModelImplIOS::IsLoading() {
// Please note, ToolbarModel's notion of isLoading is slightly different from
// WebState's IsLoading().
web::WebState* web_state = delegate_->GetActiveWebState();
return web_state && web_state->IsLoading() && !IsCurrentTabNativePage();
}
CGFloat ToolbarModelImplIOS::GetLoadProgressFraction() {
web::WebState* webState = delegate_->GetActiveWebState();
return webState ? webState->GetLoadingProgress() : 0.0;
}
bool ToolbarModelImplIOS::CanGoBack() {
if (!delegate_)
return false;
web::WebState* web_state = delegate_->GetActiveWebState();
return web_state && web_state->GetNavigationManager()->CanGoBack();
}
bool ToolbarModelImplIOS::CanGoForward() {
if (!delegate_)
return false;
web::WebState* web_state = delegate_->GetActiveWebState();
return web_state && web_state->GetNavigationManager()->CanGoForward();
}
bool ToolbarModelImplIOS::IsCurrentTabNativePage() {
web::WebState* web_state = delegate_->GetActiveWebState();
return web_state &&
web_state->GetLastCommittedURL().SchemeIs(kChromeUIScheme);
}
bool ToolbarModelImplIOS::IsCurrentTabBookmarked() {
web::WebState* web_state = delegate_->GetActiveWebState();
bookmarks::BookmarkModel* bookmarkModel =
GetBookmarkModelForWebState(web_state);
return web_state && bookmarkModel &&
bookmarkModel->IsBookmarked(web_state->GetLastCommittedURL());
}
bool ToolbarModelImplIOS::IsCurrentTabBookmarkedByUser() {
web::WebState* web_state = delegate_->GetActiveWebState();
bookmarks::BookmarkModel* bookmarkModel =
GetBookmarkModelForWebState(web_state);
return web_state && bookmarkModel &&
bookmarkModel->GetMostRecentlyAddedUserNodeForURL(
web_state->GetLastCommittedURL());
}
bool ToolbarModelImplIOS::ShouldDisplayHintText() {
web::WebState* web_state = delegate_->GetActiveWebState();
if (!web_state)
return false;
Tab* tab = LegacyTabHelper::GetTabForWebState(web_state);
return tab && [tab.webController wantsLocationBarHintText];
}