blob: 8a7fb6bcf0b81180d90f912907580c47d9e6a810 [file] [log] [blame]
// 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.
#import "ios/chrome/browser/ui/main/layout_guide_util.h"
#import "ios/chrome/browser/browser_state/chrome_browser_state.h"
#import "ios/chrome/browser/shared/coordinator/scene/scene_state.h"
#import "ios/chrome/browser/shared/coordinator/scene/scene_state_browser_agent.h"
#import "ios/chrome/browser/shared/ui/util/util_swift.h"
#import "ios/chrome/browser/ui/main/layout_guide_scene_agent.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
LayoutGuideCenter* SharedInstance() {
static LayoutGuideCenter* globalLayoutGuideCenter;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
globalLayoutGuideCenter = [[LayoutGuideCenter alloc] init];
});
return globalLayoutGuideCenter;
}
} // namespace
LayoutGuideCenter* LayoutGuideCenterForBrowser(Browser* browser) {
if (!browser) {
// If there is no browser, return a global layout guide center.
return SharedInstance();
}
SceneStateBrowserAgent* sceneStateBrowserAgent =
SceneStateBrowserAgent::FromBrowser(browser);
if (!sceneStateBrowserAgent) {
return SharedInstance();
}
SceneState* sceneState = sceneStateBrowserAgent->GetSceneState();
LayoutGuideSceneAgent* layoutGuideSceneAgent =
[LayoutGuideSceneAgent agentFromScene:sceneState];
if (!layoutGuideSceneAgent) {
return SharedInstance();
}
ChromeBrowserState* browserState = browser->GetBrowserState();
if (browserState && browserState->IsOffTheRecord()) {
return layoutGuideSceneAgent.incognitoLayoutGuideCenter;
} else {
return layoutGuideSceneAgent.layoutGuideCenter;
}
}