OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "ui/views/touchui/touch_selection_controller_impl.h" | 5 #include "ui/views/touchui/touch_selection_controller_impl.h" |
6 | 6 |
| 7 #include "base/metrics/histogram_macros.h" |
7 #include "base/time/time.h" | 8 #include "base/time/time.h" |
8 #include "ui/aura/client/cursor_client.h" | 9 #include "ui/aura/client/cursor_client.h" |
9 #include "ui/aura/env.h" | 10 #include "ui/aura/env.h" |
10 #include "ui/aura/window.h" | 11 #include "ui/aura/window.h" |
11 #include "ui/base/resource/resource_bundle.h" | 12 #include "ui/base/resource/resource_bundle.h" |
12 #include "ui/gfx/canvas.h" | 13 #include "ui/gfx/canvas.h" |
13 #include "ui/gfx/geometry/rect.h" | 14 #include "ui/gfx/geometry/rect.h" |
14 #include "ui/gfx/geometry/size.h" | 15 #include "ui/gfx/geometry/size.h" |
15 #include "ui/gfx/image/image.h" | 16 #include "ui/gfx/image/image.h" |
16 #include "ui/gfx/path.h" | 17 #include "ui/gfx/path.h" |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 selection_handle_1_(new EditingHandleView(this, | 409 selection_handle_1_(new EditingHandleView(this, |
409 client_view->GetNativeView(), | 410 client_view->GetNativeView(), |
410 false)), | 411 false)), |
411 selection_handle_2_(new EditingHandleView(this, | 412 selection_handle_2_(new EditingHandleView(this, |
412 client_view->GetNativeView(), | 413 client_view->GetNativeView(), |
413 false)), | 414 false)), |
414 cursor_handle_(new EditingHandleView(this, | 415 cursor_handle_(new EditingHandleView(this, |
415 client_view->GetNativeView(), | 416 client_view->GetNativeView(), |
416 true)), | 417 true)), |
417 context_menu_(nullptr), | 418 context_menu_(nullptr), |
| 419 command_executed_(false), |
418 dragging_handle_(nullptr) { | 420 dragging_handle_(nullptr) { |
| 421 selection_start_time_ = base::Time::Now(); |
419 aura::Window* client_window = client_view_->GetNativeView(); | 422 aura::Window* client_window = client_view_->GetNativeView(); |
420 client_window->AddObserver(this); | 423 client_window->AddObserver(this); |
421 client_widget_ = Widget::GetTopLevelWidgetForNativeView(client_window); | 424 client_widget_ = Widget::GetTopLevelWidgetForNativeView(client_window); |
422 if (client_widget_) | 425 if (client_widget_) |
423 client_widget_->AddObserver(this); | 426 client_widget_->AddObserver(this); |
424 aura::Env::GetInstance()->AddPreTargetHandler(this); | 427 aura::Env::GetInstance()->AddPreTargetHandler(this); |
425 } | 428 } |
426 | 429 |
427 TouchSelectionControllerImpl::~TouchSelectionControllerImpl() { | 430 TouchSelectionControllerImpl::~TouchSelectionControllerImpl() { |
| 431 if (!command_executed_) { |
| 432 UMA_HISTOGRAM_BOOLEAN("Event.TouchSelectionEndedWithAction", false); |
| 433 LOG(ERROR) << "Event.TouchSelectionEndedWithAction = false"; |
| 434 } |
428 HideContextMenu(); | 435 HideContextMenu(); |
429 aura::Env::GetInstance()->RemovePreTargetHandler(this); | 436 aura::Env::GetInstance()->RemovePreTargetHandler(this); |
430 if (client_widget_) | 437 if (client_widget_) |
431 client_widget_->RemoveObserver(this); | 438 client_widget_->RemoveObserver(this); |
432 client_view_->GetNativeView()->RemoveObserver(this); | 439 client_view_->GetNativeView()->RemoveObserver(this); |
433 } | 440 } |
434 | 441 |
435 void TouchSelectionControllerImpl::SelectionChanged() { | 442 void TouchSelectionControllerImpl::SelectionChanged() { |
436 ui::SelectionBound anchor, focus; | 443 ui::SelectionBound anchor, focus; |
437 client_view_->GetSelectionEndPoints(&anchor, &focus); | 444 client_view_->GetSelectionEndPoints(&anchor, &focus); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
587 client_bounds.Inset(0, 0, 0, -kSelectionHandleBarBottomAllowance); | 594 client_bounds.Inset(0, 0, 0, -kSelectionHandleBarBottomAllowance); |
588 return client_bounds.Contains(BoundToRect(bound)); | 595 return client_bounds.Contains(BoundToRect(bound)); |
589 } | 596 } |
590 | 597 |
591 bool TouchSelectionControllerImpl::IsCommandIdEnabled(int command_id) const { | 598 bool TouchSelectionControllerImpl::IsCommandIdEnabled(int command_id) const { |
592 return client_view_->IsCommandIdEnabled(command_id); | 599 return client_view_->IsCommandIdEnabled(command_id); |
593 } | 600 } |
594 | 601 |
595 void TouchSelectionControllerImpl::ExecuteCommand(int command_id, | 602 void TouchSelectionControllerImpl::ExecuteCommand(int command_id, |
596 int event_flags) { | 603 int event_flags) { |
| 604 command_executed_ = true; |
| 605 UMA_HISTOGRAM_BOOLEAN("Event.TouchSelectionEndedWithAction", true); |
| 606 base::TimeDelta duration = base::Time::Now() - selection_start_time_; |
| 607 UMA_HISTOGRAM_CUSTOM_TIMES("Event.TouchSelectionDuration", |
| 608 duration, |
| 609 base::TimeDelta::FromMilliseconds(1), |
| 610 base::TimeDelta::FromSeconds(60), |
| 611 50); |
| 612 LOG(ERROR) << "Event.TouchSelectionEndedWithAction = true"; |
| 613 LOG(ERROR) << "duration=" << duration.InMilliseconds() << "ms"; |
597 HideContextMenu(); | 614 HideContextMenu(); |
598 client_view_->ExecuteCommand(command_id, event_flags); | 615 client_view_->ExecuteCommand(command_id, event_flags); |
599 } | 616 } |
600 | 617 |
601 void TouchSelectionControllerImpl::OpenContextMenu() { | 618 void TouchSelectionControllerImpl::OpenContextMenu() { |
602 // Context menu should appear centered on top of the selected region. | 619 // Context menu should appear centered on top of the selected region. |
603 const gfx::Rect rect = context_menu_->GetAnchorRect(); | 620 const gfx::Rect rect = context_menu_->GetAnchorRect(); |
604 const gfx::Point anchor(rect.CenterPoint().x(), rect.y()); | 621 const gfx::Point anchor(rect.CenterPoint().x(), rect.y()); |
605 HideContextMenu(); | 622 HideContextMenu(); |
606 client_view_->OpenContextMenu(anchor); | 623 client_view_->OpenContextMenu(anchor); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
735 | 752 |
736 views::WidgetDelegateView* TouchSelectionControllerImpl::GetHandle1View() { | 753 views::WidgetDelegateView* TouchSelectionControllerImpl::GetHandle1View() { |
737 return selection_handle_1_.get(); | 754 return selection_handle_1_.get(); |
738 } | 755 } |
739 | 756 |
740 views::WidgetDelegateView* TouchSelectionControllerImpl::GetHandle2View() { | 757 views::WidgetDelegateView* TouchSelectionControllerImpl::GetHandle2View() { |
741 return selection_handle_2_.get(); | 758 return selection_handle_2_.get(); |
742 } | 759 } |
743 | 760 |
744 } // namespace views | 761 } // namespace views |
OLD | NEW |