| 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 | 
|---|