blob: fe6891025e6439149579812a3e8e51ce7d53ce3c [file] [log] [blame]
// Copyright 2016 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 "chrome/browser/ui/webui/signin/signin_utils.h"
#include <set>
#include "base/bind.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_finder.h"
#include "components/guest_view/browser/guest_view_manager.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "extensions/browser/guest_view/web_view/web_view_guest.h"
namespace {
bool AddWebContentsToSet(std::set<content::WebContents*>* frame_set,
const std::string& web_view_name,
content::WebContents* web_contents) {
auto* web_view = extensions::WebViewGuest::FromWebContents(web_contents);
if (web_view && web_view->name() == web_view_name)
frame_set->insert(web_contents);
return false;
}
} // namespace
namespace signin {
content::RenderFrameHost* GetAuthFrame(content::WebContents* web_contents,
const std::string& parent_frame_name) {
content::WebContents* auth_web_contents =
GetAuthFrameWebContents(web_contents, parent_frame_name);
return auth_web_contents ? auth_web_contents->GetMainFrame() : nullptr;
}
content::WebContents* GetAuthFrameWebContents(
content::WebContents* web_contents,
const std::string& parent_frame_name) {
std::set<content::WebContents*> frame_set;
auto* manager = guest_view::GuestViewManager::FromBrowserContext(
web_contents->GetBrowserContext());
if (manager) {
manager->ForEachGuest(web_contents,
base::BindRepeating(&AddWebContentsToSet, &frame_set,
parent_frame_name));
}
DCHECK_GE(1U, frame_set.size());
if (!frame_set.empty())
return *frame_set.begin();
return nullptr;
}
Browser* GetDesktopBrowser(content::WebUI* web_ui) {
Browser* browser =
chrome::FindBrowserWithWebContents(web_ui->GetWebContents());
if (!browser)
browser = chrome::FindLastActiveWithProfile(Profile::FromWebUI(web_ui));
return browser;
}
void SetInitializedModalHeight(Browser* browser,
content::WebUI* web_ui,
const base::ListValue* args) {
#if defined(OS_CHROMEOS)
NOTREACHED();
#else
if (!browser)
return;
double height;
const bool success = args->GetDouble(0, &height);
DCHECK(success);
browser->signin_view_controller()->SetModalSigninHeight(
static_cast<int>(height));
#endif
}
} // namespace signin