OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/ui/ash/launcher/app_shortcut_launcher_item_controller.h
" | 5 #include "chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.h
" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
| 9 #include <utility> |
| 10 |
9 #include "ash/wm/window_util.h" | 11 #include "ash/wm/window_util.h" |
10 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
11 #include "chrome/browser/chromeos/arc/arc_support_host.h" | 13 #include "chrome/browser/chromeos/arc/arc_support_host.h" |
12 #include "chrome/browser/extensions/launch_util.h" | 14 #include "chrome/browser/extensions/launch_util.h" |
13 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" | 15 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" |
14 #include "chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_co
ntroller.h" | 16 #include "chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_co
ntroller.h" |
15 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" | 17 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" |
16 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_util.h" | 18 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_util.h" |
17 #include "chrome/browser/ui/ash/launcher/launcher_context_menu.h" | 19 #include "chrome/browser/ui/ash/launcher/launcher_context_menu.h" |
18 #include "chrome/browser/ui/ash/launcher/launcher_controller_helper.h" | 20 #include "chrome/browser/ui/ash/launcher/launcher_controller_helper.h" |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 extensions::AppLaunchInfo::GetLaunchWebURL(extension).spec() + "*")); | 88 extensions::AppLaunchInfo::GetLaunchWebURL(extension).spec() + "*")); |
87 } | 89 } |
88 } | 90 } |
89 | 91 |
90 AppShortcutLauncherItemController::~AppShortcutLauncherItemController() {} | 92 AppShortcutLauncherItemController::~AppShortcutLauncherItemController() {} |
91 | 93 |
92 void AppShortcutLauncherItemController::ItemSelected( | 94 void AppShortcutLauncherItemController::ItemSelected( |
93 std::unique_ptr<ui::Event> event, | 95 std::unique_ptr<ui::Event> event, |
94 int64_t display_id, | 96 int64_t display_id, |
95 ash::ShelfLaunchSource source, | 97 ash::ShelfLaunchSource source, |
96 const ItemSelectedCallback& callback) { | 98 ItemSelectedCallback callback) { |
97 // In case of a keyboard event, we were called by a hotkey. In that case we | 99 // In case of a keyboard event, we were called by a hotkey. In that case we |
98 // activate the next item in line if an item of our list is already active. | 100 // activate the next item in line if an item of our list is already active. |
99 if (event && event->type() == ui::ET_KEY_RELEASED && AdvanceToNextApp()) { | 101 if (event && event->type() == ui::ET_KEY_RELEASED && AdvanceToNextApp()) { |
100 callback.Run(ash::SHELF_ACTION_WINDOW_ACTIVATED, base::nullopt); | 102 std::move(callback).Run(ash::SHELF_ACTION_WINDOW_ACTIVATED, base::nullopt); |
101 return; | 103 return; |
102 } | 104 } |
103 | 105 |
104 content::WebContents* content = GetLRUApplication(); | 106 content::WebContents* content = GetLRUApplication(); |
105 if (!content) { | 107 if (!content) { |
106 // Ideally we come here only once. After that ShellLauncherItemController | 108 // Ideally we come here only once. After that ShellLauncherItemController |
107 // will take over when the shell window gets opened. However there are apps | 109 // will take over when the shell window gets opened. However there are apps |
108 // which take a lot of time for pre-processing (like the files app) before | 110 // which take a lot of time for pre-processing (like the files app) before |
109 // they open a window. Since there is currently no other way to detect if an | 111 // they open a window. Since there is currently no other way to detect if an |
110 // app was started we suppress any further clicks within a special time out. | 112 // app was started we suppress any further clicks within a special time out. |
111 if (IsV2App() && !AllowNextLaunchAttempt()) { | 113 if (IsV2App() && !AllowNextLaunchAttempt()) { |
112 callback.Run(ash::SHELF_ACTION_NONE, | 114 std::move(callback).Run( |
113 GetAppMenuItems(event ? event->flags() : ui::EF_NONE)); | 115 ash::SHELF_ACTION_NONE, |
| 116 GetAppMenuItems(event ? event->flags() : ui::EF_NONE)); |
114 return; | 117 return; |
115 } | 118 } |
116 | 119 |
117 // Launching some items replaces this item controller instance, which | 120 // Launching some items replaces this item controller instance, which |
118 // destroys its ShelfID string pair; making copies avoid crashes. | 121 // destroys its ShelfID string pair; making copies avoid crashes. |
119 ChromeLauncherController::instance()->LaunchApp(ash::ShelfID(shelf_id()), | 122 ChromeLauncherController::instance()->LaunchApp(ash::ShelfID(shelf_id()), |
120 source, ui::EF_NONE); | 123 source, ui::EF_NONE); |
121 callback.Run(ash::SHELF_ACTION_NEW_WINDOW_CREATED, base::nullopt); | 124 std::move(callback).Run(ash::SHELF_ACTION_NEW_WINDOW_CREATED, |
| 125 base::nullopt); |
122 return; | 126 return; |
123 } | 127 } |
124 | 128 |
125 const ash::ShelfAction action = ActivateContent(content); | 129 const ash::ShelfAction action = ActivateContent(content); |
126 callback.Run(action, GetAppMenuItems(event ? event->flags() : ui::EF_NONE)); | 130 std::move(callback).Run( |
| 131 action, GetAppMenuItems(event ? event->flags() : ui::EF_NONE)); |
127 } | 132 } |
128 | 133 |
129 ash::MenuItemList AppShortcutLauncherItemController::GetAppMenuItems( | 134 ash::MenuItemList AppShortcutLauncherItemController::GetAppMenuItems( |
130 int event_flags) { | 135 int event_flags) { |
131 ash::MenuItemList items; | 136 ash::MenuItemList items; |
132 app_menu_items_ = GetRunningApplications(); | 137 app_menu_items_ = GetRunningApplications(); |
133 ChromeLauncherController* controller = ChromeLauncherController::instance(); | 138 ChromeLauncherController* controller = ChromeLauncherController::instance(); |
134 for (size_t i = 0; i < app_menu_items_.size(); i++) { | 139 for (size_t i = 0; i < app_menu_items_.size(); i++) { |
135 content::WebContents* tab = app_menu_items_[i]; | 140 content::WebContents* tab = app_menu_items_[i]; |
136 ash::mojom::MenuItemPtr item(ash::mojom::MenuItem::New()); | 141 ash::mojom::MenuItemPtr item(ash::mojom::MenuItem::New()); |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 | 366 |
362 bool AppShortcutLauncherItemController::AllowNextLaunchAttempt() { | 367 bool AppShortcutLauncherItemController::AllowNextLaunchAttempt() { |
363 if (last_launch_attempt_.is_null() || | 368 if (last_launch_attempt_.is_null() || |
364 last_launch_attempt_ + base::TimeDelta::FromMilliseconds( | 369 last_launch_attempt_ + base::TimeDelta::FromMilliseconds( |
365 kClickSuppressionInMS) < base::Time::Now()) { | 370 kClickSuppressionInMS) < base::Time::Now()) { |
366 last_launch_attempt_ = base::Time::Now(); | 371 last_launch_attempt_ = base::Time::Now(); |
367 return true; | 372 return true; |
368 } | 373 } |
369 return false; | 374 return false; |
370 } | 375 } |
OLD | NEW |