| Index: chrome/browser/ui/views/desktop_media_picker_views.cc
|
| diff --git a/chrome/browser/ui/views/desktop_media_picker_views.cc b/chrome/browser/ui/views/desktop_media_picker_views.cc
|
| index f4783b323149952c9b86c727a8536b3f48e8aec5..8aa06dbefb65a46c99c7052c30be1806e4eb3ae4 100644
|
| --- a/chrome/browser/ui/views/desktop_media_picker_views.cc
|
| +++ b/chrome/browser/ui/views/desktop_media_picker_views.cc
|
| @@ -11,6 +11,7 @@
|
| #include "chrome/grit/generated_resources.h"
|
| #include "components/web_modal/popup_manager.h"
|
| #include "content/public/browser/browser_thread.h"
|
| +#include "content/public/browser/web_contents_delegate.h"
|
| #include "ui/aura/window_tree_host.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/events/event_constants.h"
|
| @@ -358,7 +359,6 @@ void DesktopMediaListView::OnSourceThumbnailChanged(int index) {
|
| DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
|
| content::WebContents* parent_web_contents,
|
| gfx::NativeWindow context,
|
| - gfx::NativeWindow parent_window,
|
| DesktopMediaPickerViews* parent,
|
| const base::string16& app_name,
|
| const base::string16& target_name,
|
| @@ -384,26 +384,25 @@ DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
|
| GetMediaListViewHeightForRows(1), GetMediaListViewHeightForRows(2));
|
| AddChildView(scroll_view_);
|
|
|
| - // If |parent_web_contents| is set, the picker will be shown modal to the
|
| - // web contents. Otherwise, a new dialog widget inside |parent_window| will be
|
| - // created for the picker. Note that |parent_window| may also be NULL if
|
| - // parent web contents is not set. In this case the picker will be parented
|
| - // by a root window.
|
| + // If |parent_web_contents| is set and it's not a background page then the
|
| + // picker will be shown modal to the web contents. Otherwise the picker is
|
| + // shown in a separate window.
|
| views::Widget* widget = NULL;
|
| - if (parent_web_contents)
|
| + bool modal_dialog =
|
| + parent_web_contents &&
|
| + !parent_web_contents->GetDelegate()->IsNeverVisible(parent_web_contents);
|
| + if (modal_dialog) {
|
| widget = CreateWebModalDialogViews(this, parent_web_contents);
|
| - else
|
| - widget = DialogDelegate::CreateDialogWidget(this, context, parent_window);
|
| + } else {
|
| + widget = DialogDelegate::CreateDialogWidget(this, context, NULL);
|
| + }
|
|
|
| - // DesktopMediaList needs to know the ID of the picker window which
|
| - // matches the ID it gets from the OS. Depending on the OS and configuration
|
| - // we get this ID differently.
|
| + // If the picker is not modal to the calling web contents then it is displayed
|
| + // in its own top-level window, so in that case it needs to be filtered out of
|
| + // the list of top-level windows available for capture, and to achieve that
|
| + // the Id is passed to DesktopMediaList.
|
| DesktopMediaID::Id dialog_window_id = 0;
|
| -
|
| - // If there is |parent_window| or |parent_web_contents|, the picker window
|
| - // is embedded in the parent and does not have its own native window id, so we
|
| - // do not filter in that case.
|
| - if (!parent_window && !parent_web_contents) {
|
| + if (!modal_dialog) {
|
| #if defined(USE_ASH)
|
| if (chrome::IsNativeWindowInAsh(widget->GetNativeWindow())) {
|
| dialog_window_id =
|
| @@ -420,7 +419,7 @@ DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
|
|
|
| list_view_->StartUpdating(dialog_window_id);
|
|
|
| - if (parent_web_contents) {
|
| + if (modal_dialog) {
|
| web_modal::PopupManager* popup_manager =
|
| web_modal::PopupManager::FromWebContents(parent_web_contents);
|
| popup_manager->ShowModalDialog(GetWidget()->GetNativeView(),
|
| @@ -555,8 +554,7 @@ void DesktopMediaPickerViews::Show(content::WebContents* web_contents,
|
| const DoneCallback& done_callback) {
|
| callback_ = done_callback;
|
| dialog_ = new DesktopMediaPickerDialogView(
|
| - web_contents, context, parent, this, app_name, target_name,
|
| - media_list.Pass());
|
| + web_contents, context, this, app_name, target_name, media_list.Pass());
|
| }
|
|
|
| void DesktopMediaPickerViews::NotifyDialogResult(DesktopMediaID source) {
|
|
|