blob: 2b539ea35723b7cb7789f40f10457162a8954d9a [file] [log] [blame]
// Copyright 2014 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/blocked_content/app_modal_dialog_helper.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_delegate.h"
AppModalDialogHelper::AppModalDialogHelper(content::WebContents* dialog_host)
: popup_(nullptr) {
// If the WebContents that triggered this dialog is not currently focused, we
// want to store a potential popup here to restore it after the dialog was
// closed.
Browser* active_browser = BrowserList::GetInstance()->GetLastActive();
if (active_browser) {
content::WebContents* active_web_contents =
active_browser->tab_strip_model()->GetActiveWebContents();
if (active_browser->is_type_popup() && active_web_contents &&
active_web_contents->GetOpener() == dialog_host) {
// It's indeed a popup from the dialog opening WebContents. Store it, so
// we can focus it later.
popup_ = active_web_contents;
Observe(popup_);
}
}
}
AppModalDialogHelper::~AppModalDialogHelper() {
if (popup_)
popup_->GetDelegate()->ActivateContents(popup_);
}
void AppModalDialogHelper::WebContentsDestroyed() {
popup_ = nullptr;
}