Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(729)

Side by Side Diff: chrome/browser/ui/views/desktop_media_picker_views.cc

Issue 281383008: Made desktop capture screen tab-constrained in ASH (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/cocoa/media_picker/desktop_media_picker_cocoa.mm ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/media/desktop_media_picker.h" 5 #include "chrome/browser/media/desktop_media_picker.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "chrome/browser/media/desktop_media_list.h" 8 #include "chrome/browser/media/desktop_media_list.h"
9 #include "chrome/browser/media/desktop_media_list_observer.h" 9 #include "chrome/browser/media/desktop_media_list_observer.h"
10 #include "chrome/browser/ui/ash/ash_util.h" 10 #include "chrome/browser/ui/ash/ash_util.h"
11 #include "components/web_modal/web_contents_modal_dialog_host.h"
12 #include "components/web_modal/web_contents_modal_dialog_manager.h"
13 #include "components/web_modal/web_contents_modal_dialog_manager_delegate.h"
11 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
12 #include "grit/generated_resources.h" 15 #include "grit/generated_resources.h"
13 #include "ui/aura/window_tree_host.h" 16 #include "ui/aura/window_tree_host.h"
14 #include "ui/base/l10n/l10n_util.h" 17 #include "ui/base/l10n/l10n_util.h"
15 #include "ui/events/keycodes/keyboard_codes.h" 18 #include "ui/events/keycodes/keyboard_codes.h"
16 #include "ui/gfx/canvas.h" 19 #include "ui/gfx/canvas.h"
17 #include "ui/native_theme/native_theme.h" 20 #include "ui/native_theme/native_theme.h"
18 #include "ui/views/background.h" 21 #include "ui/views/background.h"
19 #include "ui/views/controls/image_view.h" 22 #include "ui/views/controls/image_view.h"
20 #include "ui/views/controls/label.h" 23 #include "ui/views/controls/label.h"
21 #include "ui/views/controls/scroll_view.h" 24 #include "ui/views/controls/scroll_view.h"
22 #include "ui/views/layout/box_layout.h" 25 #include "ui/views/layout/box_layout.h"
23 #include "ui/views/layout/layout_constants.h" 26 #include "ui/views/layout/layout_constants.h"
24 #include "ui/views/widget/widget.h" 27 #include "ui/views/widget/widget.h"
25 #include "ui/views/window/dialog_client_view.h" 28 #include "ui/views/window/dialog_client_view.h"
26 #include "ui/views/window/dialog_delegate.h" 29 #include "ui/views/window/dialog_delegate.h"
27 #include "ui/wm/core/shadow_types.h" 30 #include "ui/wm/core/shadow_types.h"
28 31
29 using content::DesktopMediaID; 32 using content::DesktopMediaID;
33 using web_modal::WebContentsModalDialogManager;
34 using web_modal::WebContentsModalDialogManagerDelegate;
30 35
31 namespace { 36 namespace {
32 37
33 const int kThumbnailWidth = 160; 38 const int kThumbnailWidth = 160;
34 const int kThumbnailHeight = 100; 39 const int kThumbnailHeight = 100;
35 const int kThumbnailMargin = 10; 40 const int kThumbnailMargin = 10;
36 const int kLabelHeight = 40; 41 const int kLabelHeight = 40;
37 const int kListItemWidth = kThumbnailMargin * 2 + kThumbnailWidth; 42 const int kListItemWidth = kThumbnailMargin * 2 + kThumbnailWidth;
38 const int kListItemHeight = 43 const int kListItemHeight =
39 kThumbnailMargin * 2 + kThumbnailHeight + kLabelHeight; 44 kThumbnailMargin * 2 + kThumbnailHeight + kLabelHeight;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 145
141 DesktopMediaPickerDialogView* parent_; 146 DesktopMediaPickerDialogView* parent_;
142 scoped_ptr<DesktopMediaList> media_list_; 147 scoped_ptr<DesktopMediaList> media_list_;
143 148
144 DISALLOW_COPY_AND_ASSIGN(DesktopMediaListView); 149 DISALLOW_COPY_AND_ASSIGN(DesktopMediaListView);
145 }; 150 };
146 151
147 // Dialog view used for DesktopMediaPickerViews. 152 // Dialog view used for DesktopMediaPickerViews.
148 class DesktopMediaPickerDialogView : public views::DialogDelegateView { 153 class DesktopMediaPickerDialogView : public views::DialogDelegateView {
149 public: 154 public:
150 DesktopMediaPickerDialogView(gfx::NativeWindow context, 155 DesktopMediaPickerDialogView(content::WebContents* parent_web_contents,
156 gfx::NativeWindow context,
151 gfx::NativeWindow parent_window, 157 gfx::NativeWindow parent_window,
152 DesktopMediaPickerViews* parent, 158 DesktopMediaPickerViews* parent,
153 const base::string16& app_name, 159 const base::string16& app_name,
154 const base::string16& target_name, 160 const base::string16& target_name,
155 scoped_ptr<DesktopMediaList> media_list); 161 scoped_ptr<DesktopMediaList> media_list);
156 virtual ~DesktopMediaPickerDialogView(); 162 virtual ~DesktopMediaPickerDialogView();
157 163
158 // Called by parent (DesktopMediaPickerViews) when it's destroyed. 164 // Called by parent (DesktopMediaPickerViews) when it's destroyed.
159 void DetachParent(); 165 void DetachParent();
160 166
(...skipping 26 matching lines...) Expand all
187 193
188 // Implementation of DesktopMediaPicker for Views. 194 // Implementation of DesktopMediaPicker for Views.
189 class DesktopMediaPickerViews : public DesktopMediaPicker { 195 class DesktopMediaPickerViews : public DesktopMediaPicker {
190 public: 196 public:
191 DesktopMediaPickerViews(); 197 DesktopMediaPickerViews();
192 virtual ~DesktopMediaPickerViews(); 198 virtual ~DesktopMediaPickerViews();
193 199
194 void NotifyDialogResult(DesktopMediaID source); 200 void NotifyDialogResult(DesktopMediaID source);
195 201
196 // DesktopMediaPicker overrides. 202 // DesktopMediaPicker overrides.
197 virtual void Show(gfx::NativeWindow context, 203 virtual void Show(content::WebContents* web_contents,
204 gfx::NativeWindow context,
198 gfx::NativeWindow parent, 205 gfx::NativeWindow parent,
199 const base::string16& app_name, 206 const base::string16& app_name,
200 const base::string16& target_name, 207 const base::string16& target_name,
201 scoped_ptr<DesktopMediaList> media_list, 208 scoped_ptr<DesktopMediaList> media_list,
202 const DoneCallback& done_callback) OVERRIDE; 209 const DoneCallback& done_callback) OVERRIDE;
203 210
204 private: 211 private:
205 DoneCallback callback_; 212 DoneCallback callback_;
206 213
207 // The |dialog_| is owned by the corresponding views::Widget instance. 214 // The |dialog_| is owned by the corresponding views::Widget instance.
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 } 485 }
479 486
480 void DesktopMediaListView::OnSourceThumbnailChanged(int index) { 487 void DesktopMediaListView::OnSourceThumbnailChanged(int index) {
481 const DesktopMediaList::Source& source = media_list_->GetSource(index); 488 const DesktopMediaList::Source& source = media_list_->GetSource(index);
482 DesktopMediaSourceView* source_view = 489 DesktopMediaSourceView* source_view =
483 static_cast<DesktopMediaSourceView*>(child_at(index)); 490 static_cast<DesktopMediaSourceView*>(child_at(index));
484 source_view->SetThumbnail(source.thumbnail); 491 source_view->SetThumbnail(source.thumbnail);
485 } 492 }
486 493
487 DesktopMediaPickerDialogView::DesktopMediaPickerDialogView( 494 DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
495 content::WebContents* parent_web_contents,
488 gfx::NativeWindow context, 496 gfx::NativeWindow context,
489 gfx::NativeWindow parent_window, 497 gfx::NativeWindow parent_window,
490 DesktopMediaPickerViews* parent, 498 DesktopMediaPickerViews* parent,
491 const base::string16& app_name, 499 const base::string16& app_name,
492 const base::string16& target_name, 500 const base::string16& target_name,
493 scoped_ptr<DesktopMediaList> media_list) 501 scoped_ptr<DesktopMediaList> media_list)
494 : parent_(parent), 502 : parent_(parent),
495 app_name_(app_name), 503 app_name_(app_name),
496 label_(new views::Label()), 504 label_(new views::Label()),
497 scroll_view_(views::ScrollView::CreateScrollViewWithBorder()), 505 scroll_view_(views::ScrollView::CreateScrollViewWithBorder()),
498 list_view_(new DesktopMediaListView(this, media_list.Pass())) { 506 list_view_(new DesktopMediaListView(this, media_list.Pass())) {
499 if (app_name == target_name) { 507 if (app_name == target_name) {
500 label_->SetText( 508 label_->SetText(
501 l10n_util::GetStringFUTF16(IDS_DESKTOP_MEDIA_PICKER_TEXT, app_name)); 509 l10n_util::GetStringFUTF16(IDS_DESKTOP_MEDIA_PICKER_TEXT, app_name));
502 } else { 510 } else {
503 label_->SetText(l10n_util::GetStringFUTF16( 511 label_->SetText(l10n_util::GetStringFUTF16(
504 IDS_DESKTOP_MEDIA_PICKER_TEXT_DELEGATED, app_name, target_name)); 512 IDS_DESKTOP_MEDIA_PICKER_TEXT_DELEGATED, app_name, target_name));
505 } 513 }
506 label_->SetMultiLine(true); 514 label_->SetMultiLine(true);
507 label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 515 label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
508 AddChildView(label_); 516 AddChildView(label_);
509 517
510 scroll_view_->SetContents(list_view_); 518 scroll_view_->SetContents(list_view_);
511 AddChildView(scroll_view_); 519 AddChildView(scroll_view_);
512 520
513 DialogDelegate::CreateDialogWidget(this, context, parent_window); 521 WebContentsModalDialogManager* web_contents_modal_dialog_manager =
522 WebContentsModalDialogManager::FromWebContents(parent_web_contents);
523 DCHECK(web_contents_modal_dialog_manager);
524 WebContentsModalDialogManagerDelegate* delegate =
525 web_contents_modal_dialog_manager->delegate();
526 DCHECK(delegate);
527 views::Widget::CreateWindowAsFramelessChild(
528 this,
529 delegate->GetWebContentsModalDialogHost()->GetHostView());
514 530
515 // DesktopMediaList needs to know the ID of the picker window which 531 // DesktopMediaList needs to know the ID of the picker window which
516 // matches the ID it gets from the OS. Depending on the OS and configuration 532 // matches the ID it gets from the OS. Depending on the OS and configuration
517 // we get this ID differently. 533 // we get this ID differently.
518 content::DesktopMediaID::Id dialog_window_id = 0; 534 content::DesktopMediaID::Id dialog_window_id = 0;
519 535
520 #if defined(USE_ASH) 536 #if defined(USE_ASH)
521 if (chrome::IsNativeWindowInAsh(GetWidget()->GetNativeWindow())) { 537 if (chrome::IsNativeWindowInAsh(GetWidget()->GetNativeWindow())) {
522 dialog_window_id = content::DesktopMediaID::RegisterAuraWindow( 538 dialog_window_id = content::DesktopMediaID::RegisterAuraWindow(
523 GetWidget()->GetNativeWindow()).id; 539 GetWidget()->GetNativeWindow()).id;
524 } else 540 } else
525 #endif 541 #endif
526 { 542 {
527 dialog_window_id = AcceleratedWidgetToDesktopMediaId( 543 dialog_window_id = AcceleratedWidgetToDesktopMediaId(
528 GetWidget()->GetNativeWindow()->GetHost()-> 544 GetWidget()->GetNativeWindow()->GetHost()->
529 GetAcceleratedWidget()); 545 GetAcceleratedWidget());
530 } 546 }
531 547
532 list_view_->StartUpdating(dialog_window_id); 548 list_view_->StartUpdating(dialog_window_id);
533 549
534 GetWidget()->Show(); 550 web_contents_modal_dialog_manager->ShowModalDialog(
551 GetWidget()->GetNativeView());
535 } 552 }
536 553
537 DesktopMediaPickerDialogView::~DesktopMediaPickerDialogView() {} 554 DesktopMediaPickerDialogView::~DesktopMediaPickerDialogView() {}
538 555
539 void DesktopMediaPickerDialogView::DetachParent() { 556 void DesktopMediaPickerDialogView::DetachParent() {
540 parent_ = NULL; 557 parent_ = NULL;
541 } 558 }
542 559
543 gfx::Size DesktopMediaPickerDialogView::GetPreferredSize() { 560 gfx::Size DesktopMediaPickerDialogView::GetPreferredSize() {
544 return gfx::Size(600, 500); 561 return gfx::Size(600, 500);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 : dialog_(NULL) { 629 : dialog_(NULL) {
613 } 630 }
614 631
615 DesktopMediaPickerViews::~DesktopMediaPickerViews() { 632 DesktopMediaPickerViews::~DesktopMediaPickerViews() {
616 if (dialog_) { 633 if (dialog_) {
617 dialog_->DetachParent(); 634 dialog_->DetachParent();
618 dialog_->GetWidget()->Close(); 635 dialog_->GetWidget()->Close();
619 } 636 }
620 } 637 }
621 638
622 void DesktopMediaPickerViews::Show(gfx::NativeWindow context, 639 void DesktopMediaPickerViews::Show(content::WebContents* web_contents,
640 gfx::NativeWindow context,
623 gfx::NativeWindow parent, 641 gfx::NativeWindow parent,
624 const base::string16& app_name, 642 const base::string16& app_name,
625 const base::string16& target_name, 643 const base::string16& target_name,
626 scoped_ptr<DesktopMediaList> media_list, 644 scoped_ptr<DesktopMediaList> media_list,
627 const DoneCallback& done_callback) { 645 const DoneCallback& done_callback) {
628 callback_ = done_callback; 646 callback_ = done_callback;
629 dialog_ = new DesktopMediaPickerDialogView( 647 dialog_ = new DesktopMediaPickerDialogView(
630 context, parent, this, app_name, target_name, media_list.Pass()); 648 web_contents, context, parent, this, app_name, target_name,
649 media_list.Pass());
631 } 650 }
632 651
633 void DesktopMediaPickerViews::NotifyDialogResult( 652 void DesktopMediaPickerViews::NotifyDialogResult(
634 DesktopMediaID source) { 653 DesktopMediaID source) {
635 // Once this method is called the |dialog_| will close and destroy itself. 654 // Once this method is called the |dialog_| will close and destroy itself.
636 dialog_->DetachParent(); 655 dialog_->DetachParent();
637 dialog_ = NULL; 656 dialog_ = NULL;
638 657
639 DCHECK(!callback_.is_null()); 658 DCHECK(!callback_.is_null());
640 659
641 // Notify the |callback_| asynchronously because it may need to destroy 660 // Notify the |callback_| asynchronously because it may need to destroy
642 // DesktopMediaPicker. 661 // DesktopMediaPicker.
643 content::BrowserThread::PostTask( 662 content::BrowserThread::PostTask(
644 content::BrowserThread::UI, FROM_HERE, 663 content::BrowserThread::UI, FROM_HERE,
645 base::Bind(callback_, source)); 664 base::Bind(callback_, source));
646 callback_.Reset(); 665 callback_.Reset();
647 } 666 }
648 667
649 } // namespace 668 } // namespace
650 669
651 // static 670 // static
652 scoped_ptr<DesktopMediaPicker> DesktopMediaPicker::Create() { 671 scoped_ptr<DesktopMediaPicker> DesktopMediaPicker::Create() {
653 return scoped_ptr<DesktopMediaPicker>(new DesktopMediaPickerViews()); 672 return scoped_ptr<DesktopMediaPicker>(new DesktopMediaPickerViews());
654 } 673 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/media_picker/desktop_media_picker_cocoa.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698