| Index: ui/app_list/views/apps_grid_view.cc | 
| diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc | 
| index fbd80f106cf42c34246f151791742d7f9af22449..c11a328d8682938d518dc8934ff6b6f5b26e2cf9 100644 | 
| --- a/ui/app_list/views/apps_grid_view.cc | 
| +++ b/ui/app_list/views/apps_grid_view.cc | 
| @@ -29,28 +29,15 @@ | 
| #include "ui/gfx/geometry/vector2d.h" | 
| #include "ui/gfx/geometry/vector2d_conversions.h" | 
| #include "ui/views/border.h" | 
| +#include "ui/views/controls/label.h" | 
| #include "ui/views/view_model_utils.h" | 
| #include "ui/views/widget/widget.h" | 
|  | 
| #if defined(USE_AURA) | 
| #include "ui/aura/window.h" | 
| #include "ui/aura/window_event_dispatcher.h" | 
| -#if defined(OS_WIN) | 
| -#include "ui/views/win/hwnd_util.h" | 
| -#endif  // defined(OS_WIN) | 
| #endif  // defined(USE_AURA) | 
|  | 
| -#if defined(OS_WIN) | 
| -#include "base/command_line.h" | 
| -#include "base/files/file_path.h" | 
| -#include "base/win/shortcut.h" | 
| -#include "ui/base/dragdrop/drag_utils.h" | 
| -#include "ui/base/dragdrop/drop_target_win.h" | 
| -#include "ui/base/dragdrop/os_exchange_data.h" | 
| -#include "ui/base/dragdrop/os_exchange_data_provider_win.h" | 
| -#include "ui/display/win/screen_win.h" | 
| -#endif | 
| - | 
| namespace app_list { | 
|  | 
| namespace { | 
| @@ -86,10 +73,6 @@ const int kPageFlipZoneSize = 40; | 
| // Delay in milliseconds to do the page flip. | 
| const int kPageFlipDelayInMs = 1000; | 
|  | 
| -// How many pages on either side of the selected one we prerender. Currently 0 | 
| -// to test impact of prerendering on UI jank for http://crbug.com/440224. Was 1. | 
| -const int kPrerenderPages = 0; | 
| - | 
| // The drag and drop proxy should get scaled by this factor. | 
| const float kDragAndDropProxyScale = 1.5f; | 
|  | 
| @@ -233,127 +216,6 @@ int ClampToRange(int value, int min, int max) { | 
|  | 
| }  // namespace | 
|  | 
| -#if defined(OS_WIN) | 
| -// Interprets drag events sent from Windows via the drag/drop API and forwards | 
| -// them to AppsGridView. | 
| -// On Windows, in order to have the OS perform the drag properly we need to | 
| -// provide it with a shortcut file which may or may not exist at the time the | 
| -// drag is started. Therefore while waiting for that shortcut to be located we | 
| -// just do a regular "internal" drag and transition into the synchronous drag | 
| -// when the shortcut is found/created. Hence a synchronous drag is an optional | 
| -// phase of a regular drag and non-Windows platforms drags are equivalent to a | 
| -// Windows drag that never enters the synchronous drag phase. | 
| -class SynchronousDrag : public ui::DragSourceWin { | 
| - public: | 
| -  SynchronousDrag(AppsGridView* grid_view, | 
| -                  AppListItemView* drag_view, | 
| -                  const gfx::Point& drag_view_offset) | 
| -      : grid_view_(grid_view), | 
| -        drag_view_(drag_view), | 
| -        drag_view_offset_(drag_view_offset), | 
| -        has_shortcut_path_(false), | 
| -        running_(false), | 
| -        canceled_(false) {} | 
| - | 
| -  void set_shortcut_path(const base::FilePath& shortcut_path) { | 
| -    has_shortcut_path_ = true; | 
| -    shortcut_path_ = shortcut_path; | 
| -  } | 
| - | 
| -  bool running() { return running_; } | 
| - | 
| -  bool CanRun() { | 
| -    return has_shortcut_path_ && !running_; | 
| -  } | 
| - | 
| -  void Run() { | 
| -    DCHECK(CanRun()); | 
| - | 
| -    // Prevent the synchronous dragger being destroyed while the drag is | 
| -    // running. | 
| -    Microsoft::WRL::ComPtr<SynchronousDrag> this_ref = this; | 
| -    running_ = true; | 
| - | 
| -    ui::OSExchangeData data; | 
| -    SetupExchangeData(&data); | 
| - | 
| -    // Hide the dragged view because the OS is going to create its own. | 
| -    drag_view_->SetVisible(false); | 
| - | 
| -    // Blocks until the drag is finished. Calls into the ui::DragSourceWin | 
| -    // methods. | 
| -    DWORD effects; | 
| -    DoDragDrop(ui::OSExchangeDataProviderWin::GetIDataObject(data), | 
| -               this, DROPEFFECT_MOVE | DROPEFFECT_LINK, &effects); | 
| - | 
| -    // If |drag_view_| is NULL the drag was ended by some reentrant code. | 
| -    if (drag_view_) { | 
| -      // Make the drag view visible again. | 
| -      drag_view_->SetVisible(true); | 
| -      drag_view_->OnSyncDragEnd(); | 
| - | 
| -      grid_view_->EndDrag(canceled_ || !IsCursorWithinGridView()); | 
| -    } | 
| -  } | 
| - | 
| -  void EndDragExternally() { | 
| -    CancelDrag(); | 
| -    DCHECK(drag_view_); | 
| -    drag_view_->SetVisible(true); | 
| -    drag_view_ = NULL; | 
| -  } | 
| - | 
| - private: | 
| -  // Overridden from ui::DragSourceWin. | 
| -  void OnDragSourceCancel() override { canceled_ = true; } | 
| - | 
| -  void OnDragSourceDrop() override {} | 
| - | 
| -  void OnDragSourceMove() override { | 
| -    grid_view_->UpdateDrag(AppsGridView::MOUSE, GetCursorInGridViewCoords()); | 
| -  } | 
| - | 
| -  void SetupExchangeData(ui::OSExchangeData* data) { | 
| -    data->SetFilename(shortcut_path_); | 
| -    drag_utils::SetDragImageOnDataObject( | 
| -        drag_view_->GetDragImage(), | 
| -        drag_view_offset_ - drag_view_->GetDragImageOffset(), data); | 
| -  } | 
| - | 
| -  HWND GetGridViewHWND() { | 
| -    return views::HWNDForView(grid_view_); | 
| -  } | 
| - | 
| -  bool IsCursorWithinGridView() { | 
| -    POINT p; | 
| -    GetCursorPos(&p); | 
| -    return GetGridViewHWND() == WindowFromPoint(p); | 
| -  } | 
| - | 
| -  gfx::Point GetCursorInGridViewCoords() { | 
| -    POINT p; | 
| -    GetCursorPos(&p); | 
| -    ScreenToClient(GetGridViewHWND(), &p); | 
| -    gfx::Point grid_view_pt(p.x, p.y); | 
| -    grid_view_pt = | 
| -        display::win::ScreenWin::ClientToDIPPoint(GetGridViewHWND(), | 
| -                                                  grid_view_pt); | 
| -    views::View::ConvertPointFromWidget(grid_view_, &grid_view_pt); | 
| -    return grid_view_pt; | 
| -  } | 
| - | 
| -  AppsGridView* grid_view_; | 
| -  AppListItemView* drag_view_; | 
| -  gfx::Point drag_view_offset_; | 
| -  bool has_shortcut_path_; | 
| -  base::FilePath shortcut_path_; | 
| -  bool running_; | 
| -  bool canceled_; | 
| - | 
| -  DISALLOW_COPY_AND_ASSIGN(SynchronousDrag); | 
| -}; | 
| -#endif  // defined(OS_WIN) | 
| - | 
| AppsGridView::AppsGridView(AppsGridViewDelegate* delegate) | 
| : model_(NULL), | 
| item_list_(NULL), | 
| @@ -365,9 +227,6 @@ AppsGridView::AppsGridView(AppsGridViewDelegate* delegate) | 
| selected_view_(NULL), | 
| drag_view_(NULL), | 
| drag_start_page_(-1), | 
| -#if defined(OS_WIN) | 
| -      use_synchronous_drag_(true), | 
| -#endif | 
| drag_pointer_(NONE), | 
| drop_attempt_(DROP_FOR_NONE), | 
| drag_and_drop_host_(NULL), | 
| @@ -510,80 +369,6 @@ void AppsGridView::InitiateDrag(AppListItemView* view, | 
| drag_view_start_ = gfx::Point(drag_view_->x(), drag_view_->y()); | 
| } | 
|  | 
| -void AppsGridView::StartSettingUpSynchronousDrag() { | 
| -#if defined(OS_WIN) | 
| -  if (!delegate_ || !use_synchronous_drag_) | 
| -    return; | 
| - | 
| -  // Folders and downloading items can't be integrated with the OS. | 
| -  if (IsFolderItem(drag_view_->item()) || drag_view_->item()->is_installing()) | 
| -    return; | 
| - | 
| -  // Favor the drag and drop host over native win32 drag. For the Win8/ash | 
| -  // launcher we want to have ashes drag and drop over win32's. | 
| -  if (drag_and_drop_host_) | 
| -    return; | 
| - | 
| -  // Never create a second synchronous drag if the drag started in a folder. | 
| -  if (IsDraggingForReparentInRootLevelGridView()) | 
| -    return; | 
| - | 
| -  synchronous_drag_ = Microsoft::WRL::Make<SynchronousDrag>(this, drag_view_, | 
| -                                                            drag_view_offset_); | 
| -  delegate_->GetShortcutPathForApp(drag_view_->item()->id(), | 
| -                                   base::Bind(&AppsGridView::OnGotShortcutPath, | 
| -                                              base::Unretained(this), | 
| -                                              synchronous_drag_)); | 
| -#endif | 
| -} | 
| - | 
| -bool AppsGridView::RunSynchronousDrag() { | 
| -#if defined(OS_WIN) | 
| -  if (!synchronous_drag_.Get()) | 
| -    return false; | 
| - | 
| -  if (synchronous_drag_->CanRun()) { | 
| -    if (IsDraggingForReparentInHiddenGridView()) | 
| -      folder_delegate_->SetRootLevelDragViewVisible(false); | 
| -    synchronous_drag_->Run(); | 
| -    synchronous_drag_ = nullptr; | 
| -    return true; | 
| -  } else if (!synchronous_drag_->running()) { | 
| -    // The OS drag is not ready yet. If the root grid has a drag view because | 
| -    // a reparent has started, ensure it is visible. | 
| -    if (IsDraggingForReparentInHiddenGridView()) | 
| -      folder_delegate_->SetRootLevelDragViewVisible(true); | 
| -  } | 
| -#endif | 
| -  return false; | 
| -} | 
| - | 
| -void AppsGridView::CleanUpSynchronousDrag() { | 
| -#if defined(OS_WIN) | 
| -  if (synchronous_drag_.Get()) | 
| -    synchronous_drag_->EndDragExternally(); | 
| - | 
| -  synchronous_drag_ = nullptr; | 
| -#endif | 
| -} | 
| - | 
| -#if defined(OS_WIN) | 
| -void AppsGridView::OnGotShortcutPath( | 
| -    Microsoft::WRL::ComPtr<SynchronousDrag> synchronous_drag, | 
| -    const base::FilePath& path) { | 
| -  // Drag may have ended before we get the shortcut path or a new drag may have | 
| -  // begun. | 
| -  if (synchronous_drag_ != synchronous_drag) | 
| -    return; | 
| -  // Setting the shortcut path here means the next time we hit UpdateDrag() | 
| -  // we'll enter the synchronous drag. | 
| -  // NOTE we don't Run() the drag here because that causes animations not to | 
| -  // update for some reason. | 
| -  synchronous_drag_->set_shortcut_path(path); | 
| -  DCHECK(synchronous_drag_->CanRun()); | 
| -} | 
| -#endif | 
| - | 
| bool AppsGridView::UpdateDragFromItem(Pointer pointer, | 
| const ui::LocatedEvent& event) { | 
| if (!drag_view_) | 
| @@ -612,9 +397,6 @@ void AppsGridView::UpdateDrag(Pointer pointer, const gfx::Point& point) { | 
| if (!drag_view_) | 
| return;  // Drag canceled. | 
|  | 
| -  if (RunSynchronousDrag()) | 
| -    return; | 
| - | 
| gfx::Vector2d drag_vector(point - drag_start_grid_view_); | 
| if (!dragging() && ExceededDragThreshold(drag_vector)) { | 
| drag_pointer_ = pointer; | 
| @@ -626,7 +408,6 @@ void AppsGridView::UpdateDrag(Pointer pointer, const gfx::Point& point) { | 
| if (!drag_view_) | 
| return; | 
|  | 
| -    StartSettingUpSynchronousDrag(); | 
| if (!dragging_for_reparent_item_) | 
| StartDragAndDropHostDrag(point); | 
| } | 
| @@ -734,10 +515,6 @@ void AppsGridView::EndDrag(bool cancel) { | 
| } | 
| } | 
|  | 
| -  // The drag can be ended after the synchronous drag is created but before it | 
| -  // is Run(). | 
| -  CleanUpSynchronousDrag(); | 
| - | 
| SetAsFolderDroppingTarget(folder_drop_target_, false); | 
| ClearDragState(); | 
| AnimateToIdealBounds(); | 
| @@ -870,16 +647,6 @@ void AppsGridView::SetDragAndDropHostOfCurrentAppList( | 
| drag_and_drop_host_ = drag_and_drop_host; | 
| } | 
|  | 
| -void AppsGridView::Prerender() { | 
| -  Layout(); | 
| -  int selected_page = std::max(0, pagination_model_.selected_page()); | 
| -  int start = std::max(0, (selected_page - kPrerenderPages) * tiles_per_page()); | 
| -  int end = std::min(view_model_.view_size(), | 
| -                     (selected_page + 1 + kPrerenderPages) * tiles_per_page()); | 
| -  for (int i = start; i < end; i++) | 
| -    GetItemViewAt(i)->Prerender(); | 
| -} | 
| - | 
| bool AppsGridView::IsAnimatingView(AppListItemView* view) { | 
| return bounds_animator_.IsAnimating(view); | 
| } | 
| @@ -1475,9 +1242,6 @@ void AppsGridView::OnFolderItemReparentTimer() { | 
| DCHECK(folder_delegate_); | 
| if (drag_out_of_folder_container_ && drag_view_) { | 
| bool has_native_drag = drag_and_drop_host_ != nullptr; | 
| -#if defined(OS_WIN) | 
| -    has_native_drag = has_native_drag || synchronous_drag_.Get(); | 
| -#endif | 
| folder_delegate_->ReparentItem( | 
| drag_view_, last_drag_point_, has_native_drag); | 
|  | 
| @@ -1588,10 +1352,6 @@ void AppsGridView::EndDragFromReparentItemInRootLevel( | 
| SetViewHidden(drag_view_, false /* show */, true /* no animate */); | 
| } | 
|  | 
| -  // The drag can be ended after the synchronous drag is created but before it | 
| -  // is Run(). | 
| -  CleanUpSynchronousDrag(); | 
| - | 
| SetAsFolderDroppingTarget(folder_drop_target_, false); | 
| if (cancel_reparent) { | 
| CancelFolderItemReparent(drag_view_); | 
| @@ -1615,10 +1375,6 @@ void AppsGridView::EndDragForReparentInHiddenFolderGridView() { | 
| drag_and_drop_host_->DestroyDragIconProxy(); | 
| } | 
|  | 
| -  // The drag can be ended after the synchronous drag is created but before it | 
| -  // is Run(). | 
| -  CleanUpSynchronousDrag(); | 
| - | 
| SetAsFolderDroppingTarget(folder_drop_target_, false); | 
| ClearDragState(); | 
| } | 
|  |