Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / desktop_media_picker_views.cc
index 9e21558..f4783b3 100644 (file)
@@ -2,16 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/media/desktop_media_picker.h"
+#include "chrome/browser/ui/views/desktop_media_picker_views.h"
 
 #include "base/callback.h"
 #include "chrome/browser/media/desktop_media_list.h"
-#include "chrome/browser/media/desktop_media_list_observer.h"
 #include "chrome/browser/ui/ash/ash_util.h"
 #include "chrome/browser/ui/views/constrained_window_views.h"
-#include "components/web_modal/web_contents_modal_dialog_manager.h"
+#include "chrome/grit/generated_resources.h"
+#include "components/web_modal/popup_manager.h"
 #include "content/public/browser/browser_thread.h"
-#include "grit/generated_resources.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/events/event_constants.h"
 #include "ui/views/controls/image_view.h"
 #include "ui/views/controls/label.h"
 #include "ui/views/controls/scroll_view.h"
-#include "ui/views/layout/box_layout.h"
 #include "ui/views/layout/layout_constants.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/window/dialog_client_view.h"
-#include "ui/views/window/dialog_delegate.h"
 #include "ui/wm/core/shadow_types.h"
 
 using content::DesktopMediaID;
@@ -49,12 +46,12 @@ const int kDesktopMediaSourceViewGroupId = 1;
 const char kDesktopMediaSourceViewClassName[] =
     "DesktopMediaPicker_DesktopMediaSourceView";
 
-content::DesktopMediaID::Id AcceleratedWidgetToDesktopMediaId(
+DesktopMediaID::Id AcceleratedWidgetToDesktopMediaId(
     gfx::AcceleratedWidget accelerated_widget) {
 #if defined(OS_WIN)
-  return reinterpret_cast<content::DesktopMediaID::Id>(accelerated_widget);
+  return reinterpret_cast<DesktopMediaID::Id>(accelerated_widget);
 #else
-  return static_cast<content::DesktopMediaID::Id>(accelerated_widget);
+  return static_cast<DesktopMediaID::Id>(accelerated_widget);
 #endif
 }
 
@@ -62,169 +59,7 @@ int GetMediaListViewHeightForRows(size_t rows) {
   return kListItemHeight * rows;
 }
 
-class DesktopMediaListView;
-class DesktopMediaPickerDialogView;
-class DesktopMediaPickerViews;
-
-// View used for each item in DesktopMediaListView. Shows a single desktop media
-// source as a thumbnail with the title under it.
-class DesktopMediaSourceView : public views::View {
- public:
-  DesktopMediaSourceView(DesktopMediaListView* parent,
-                         DesktopMediaID source_id);
-  virtual ~DesktopMediaSourceView();
-
-  // Updates thumbnail and title from |source|.
-  void SetName(const base::string16& name);
-  void SetThumbnail(const gfx::ImageSkia& thumbnail);
-
-  // Id for the source shown by this View.
-  const DesktopMediaID& source_id() const {
-    return source_id_;
-  }
-
-  // Returns true if the source is selected.
-  bool is_selected() const { return selected_; }
-
-  // Updates selection state of the element. If |selected| is true then also
-  // calls SetSelected(false) for the source view that was selected before that
-  // (if any).
-  void SetSelected(bool selected);
-
-  // views::View interface.
-  virtual const char* GetClassName() const OVERRIDE;
-  virtual void Layout() OVERRIDE;
-  virtual views::View* GetSelectedViewForGroup(int group) OVERRIDE;
-  virtual bool IsGroupFocusTraversable() const OVERRIDE;
-  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
-  virtual void OnFocus() OVERRIDE;
-  virtual void OnBlur() OVERRIDE;
-  virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
-  virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
-
- private:
-  DesktopMediaListView* parent_;
-  DesktopMediaID source_id_;
-
-  views::ImageView* image_view_;
-  views::Label* label_;
-
-  bool selected_;
-
-  DISALLOW_COPY_AND_ASSIGN(DesktopMediaSourceView);
-};
-
-// View that shows list of desktop media sources available from
-// DesktopMediaList.
-class DesktopMediaListView : public views::View,
-                             public DesktopMediaListObserver {
- public:
-  DesktopMediaListView(DesktopMediaPickerDialogView* parent,
-                       scoped_ptr<DesktopMediaList> media_list);
-  virtual ~DesktopMediaListView();
-
-  void StartUpdating(content::DesktopMediaID::Id dialog_window_id);
-
-  // Called by DesktopMediaSourceView when selection has changed.
-  void OnSelectionChanged();
-
-  // Called by DesktopMediaSourceView when a source has been double-clicked.
-  void OnDoubleClick();
-
-  // Returns currently selected source.
-  DesktopMediaSourceView* GetSelection();
-
-  // views::View overrides.
-  virtual gfx::Size GetPreferredSize() const OVERRIDE;
-  virtual void Layout() OVERRIDE;
-  virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
-
- private:
-  // DesktopMediaList::Observer interface
-  virtual void OnSourceAdded(int index) OVERRIDE;
-  virtual void OnSourceRemoved(int index) OVERRIDE;
-  virtual void OnSourceMoved(int old_index, int new_index) OVERRIDE;
-  virtual void OnSourceNameChanged(int index) OVERRIDE;
-  virtual void OnSourceThumbnailChanged(int index) OVERRIDE;
-
-  DesktopMediaPickerDialogView* parent_;
-  scoped_ptr<DesktopMediaList> media_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(DesktopMediaListView);
-};
-
-// Dialog view used for DesktopMediaPickerViews.
-class DesktopMediaPickerDialogView : public views::DialogDelegateView {
- public:
-  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,
-                               scoped_ptr<DesktopMediaList> media_list);
-  virtual ~DesktopMediaPickerDialogView();
-
-  // Called by parent (DesktopMediaPickerViews) when it's destroyed.
-  void DetachParent();
-
-  // Called by DesktopMediaListView.
-  void OnSelectionChanged();
-  void OnDoubleClick();
-
-  // views::View overrides.
-  virtual gfx::Size GetPreferredSize() const OVERRIDE;
-  virtual void Layout() OVERRIDE;
-
-  // views::DialogDelegateView overrides.
-  virtual ui::ModalType GetModalType() const OVERRIDE;
-  virtual base::string16 GetWindowTitle() const OVERRIDE;
-  virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE;
-  virtual base::string16 GetDialogButtonLabel(
-      ui::DialogButton button) const OVERRIDE;
-  virtual bool Accept() OVERRIDE;
-  virtual void DeleteDelegate() OVERRIDE;
-
-  void OnMediaListRowsChanged();
-
- private:
-  DesktopMediaPickerViews* parent_;
-  base::string16 app_name_;
-
-  views::Label* label_;
-  views::ScrollView* scroll_view_;
-  DesktopMediaListView* list_view_;
-
-  DISALLOW_COPY_AND_ASSIGN(DesktopMediaPickerDialogView);
-};
-
-// Implementation of DesktopMediaPicker for Views.
-class DesktopMediaPickerViews : public DesktopMediaPicker {
- public:
-  DesktopMediaPickerViews();
-  virtual ~DesktopMediaPickerViews();
-
-  void NotifyDialogResult(DesktopMediaID source);
-
-  // DesktopMediaPicker overrides.
-  virtual void Show(content::WebContents* web_contents,
-                    gfx::NativeWindow context,
-                    gfx::NativeWindow parent,
-                    const base::string16& app_name,
-                    const base::string16& target_name,
-                    scoped_ptr<DesktopMediaList> media_list,
-                    const DoneCallback& done_callback) OVERRIDE;
-
- private:
-  DoneCallback callback_;
-
-  // The |dialog_| is owned by the corresponding views::Widget instance.
-  // When DesktopMediaPickerViews is destroyed the |dialog_| is destroyed
-  // asynchronously by closing the widget.
-  DesktopMediaPickerDialogView* dialog_;
-
-  DISALLOW_COPY_AND_ASSIGN(DesktopMediaPickerViews);
-};
+}  // namespace
 
 DesktopMediaSourceView::DesktopMediaSourceView(
     DesktopMediaListView* parent,
@@ -370,8 +205,7 @@ DesktopMediaListView::DesktopMediaListView(
 
 DesktopMediaListView::~DesktopMediaListView() {}
 
-void DesktopMediaListView::StartUpdating(
-    content::DesktopMediaID::Id dialog_window_id) {
+void DesktopMediaListView::StartUpdating(DesktopMediaID::Id dialog_window_id) {
   media_list_->SetViewDialogWindowId(dialog_window_id);
   media_list_->StartUpdating(this);
 }
@@ -564,7 +398,7 @@ DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
   // 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.
-  content::DesktopMediaID::Id dialog_window_id = 0;
+  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
@@ -572,8 +406,8 @@ DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
   if (!parent_window && !parent_web_contents) {
 #if defined(USE_ASH)
     if (chrome::IsNativeWindowInAsh(widget->GetNativeWindow())) {
-      dialog_window_id = content::DesktopMediaID::RegisterAuraWindow(
-          widget->GetNativeWindow()).id;
+      dialog_window_id =
+          DesktopMediaID::RegisterAuraWindow(widget->GetNativeWindow()).id;
       DCHECK_NE(dialog_window_id, 0);
     }
 #endif
@@ -587,10 +421,10 @@ DesktopMediaPickerDialogView::DesktopMediaPickerDialogView(
   list_view_->StartUpdating(dialog_window_id);
 
   if (parent_web_contents) {
-    web_modal::WebContentsModalDialogManager* manager =
-        web_modal::WebContentsModalDialogManager::FromWebContents(
-            parent_web_contents);
-    manager->ShowModalDialog(widget->GetNativeView());
+    web_modal::PopupManager* popup_manager =
+        web_modal::PopupManager::FromWebContents(parent_web_contents);
+    popup_manager->ShowModalDialog(GetWidget()->GetNativeView(),
+                                   parent_web_contents);
   } else {
     widget->Show();
   }
@@ -694,6 +528,14 @@ void DesktopMediaPickerDialogView::OnMediaListRowsChanged() {
   GetWidget()->CenterWindow(gfx::Size(widget_bound.width(), new_height));
 }
 
+DesktopMediaSourceView*
+DesktopMediaPickerDialogView::GetMediaSourceViewForTesting(int index) const {
+  if (list_view_->child_count() <= index)
+    return NULL;
+
+  return reinterpret_cast<DesktopMediaSourceView*>(list_view_->child_at(index));
+}
+
 DesktopMediaPickerViews::DesktopMediaPickerViews() : dialog_(NULL) {
 }
 
@@ -732,8 +574,6 @@ void DesktopMediaPickerViews::NotifyDialogResult(DesktopMediaID source) {
   callback_.Reset();
 }
 
-}  // namespace
-
 // static
 scoped_ptr<DesktopMediaPicker> DesktopMediaPicker::Create() {
   return scoped_ptr<DesktopMediaPicker>(new DesktopMediaPickerViews());