blob: cecb7be384155e736ba5e9d83737e44ed2f47091 [file] [log] [blame]
// Copyright 2015 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/user_manager.h"
#include "base/bind.h"
#include "components/guest_view/browser/guest_view_manager.h"
namespace {
bool AddToSet(std::set<content::WebContents*>* content_set,
content::WebContents* web_contents) {
content_set->insert(web_contents);
return false;
}
} // namespace
UserManagerProfileDialog::BaseDialogDelegate::BaseDialogDelegate()
: guest_web_contents_(nullptr) {}
bool UserManagerProfileDialog::BaseDialogDelegate::HandleContextMenu(
content::RenderFrameHost* render_frame_host,
const content::ContextMenuParams& params) {
// Ignores context menu.
return true;
}
void UserManagerProfileDialog::BaseDialogDelegate::LoadingStateChanged(
content::WebContents* source,
bool to_different_document) {
if (source->IsLoading() || guest_web_contents_)
return;
// Try to find the embedded WebView and manage its WebContents. The WebView
// may not be found in the initial page load since it loads asynchronously.
std::set<content::WebContents*> content_set;
guest_view::GuestViewManager* manager =
guest_view::GuestViewManager::FromBrowserContext(
source->GetBrowserContext());
if (manager)
manager->ForEachGuest(source, base::Bind(&AddToSet, &content_set));
DCHECK_LE(content_set.size(), 1U);
if (!content_set.empty()) {
guest_web_contents_ = *content_set.begin();
guest_web_contents_->SetDelegate(this);
}
}