Commit 18b7526e authored by nancy's avatar nancy Committed by Commit Bot

Update Shelf LaunchApp to use AppService to launch apps.

BUG=1002351

Change-Id: I8df9f7f59599d5874c7170555a285b46141bb125
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1803035Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Nancy Wang <nancylingwang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#697054}
parent 6e0bf089
...@@ -244,6 +244,9 @@ void ArcApps::Launch(const std::string& app_id, ...@@ -244,6 +244,9 @@ void ArcApps::Launch(const std::string& app_id,
case apps::mojom::LaunchSource::kFromParentalControls: case apps::mojom::LaunchSource::kFromParentalControls:
uit = arc::UserInteractionType::APP_STARTED_FROM_SETTINGS; uit = arc::UserInteractionType::APP_STARTED_FROM_SETTINGS;
break; break;
case apps::mojom::LaunchSource::kFromShelf:
uit = arc::UserInteractionType::APP_STARTED_FROM_SHELF;
break;
} }
arc::LaunchApp(profile_, app_id, event_flags, uit, display_id); arc::LaunchApp(profile_, app_id, event_flags, uit, display_id);
......
...@@ -157,6 +157,7 @@ void BuiltInChromeOsApps::Launch(const std::string& app_id, ...@@ -157,6 +157,7 @@ void BuiltInChromeOsApps::Launch(const std::string& app_id,
switch (launch_source) { switch (launch_source) {
case apps::mojom::LaunchSource::kUnknown: case apps::mojom::LaunchSource::kUnknown:
case apps::mojom::LaunchSource::kFromParentalControls: case apps::mojom::LaunchSource::kFromParentalControls:
case apps::mojom::LaunchSource::kFromShelf:
break; break;
case apps::mojom::LaunchSource::kFromAppListGrid: case apps::mojom::LaunchSource::kFromAppListGrid:
case apps::mojom::LaunchSource::kFromAppListGridContextMenu: case apps::mojom::LaunchSource::kFromAppListGridContextMenu:
......
...@@ -94,6 +94,8 @@ ash::ShelfLaunchSource ConvertLaunchSource( ...@@ -94,6 +94,8 @@ ash::ShelfLaunchSource ConvertLaunchSource(
case apps::mojom::LaunchSource::kFromAppListQueryContextMenu: case apps::mojom::LaunchSource::kFromAppListQueryContextMenu:
case apps::mojom::LaunchSource::kFromAppListRecommendation: case apps::mojom::LaunchSource::kFromAppListRecommendation:
return ash::LAUNCH_FROM_APP_LIST_SEARCH; return ash::LAUNCH_FROM_APP_LIST_SEARCH;
case apps::mojom::LaunchSource::kFromShelf:
return ash::LAUNCH_FROM_SHELF;
} }
} }
...@@ -255,6 +257,7 @@ void ExtensionApps::Launch(const std::string& app_id, ...@@ -255,6 +257,7 @@ void ExtensionApps::Launch(const std::string& app_id,
extensions::RecordAppListSearchLaunch(extension); extensions::RecordAppListSearchLaunch(extension);
break; break;
case apps::mojom::LaunchSource::kFromAppListRecommendation: case apps::mojom::LaunchSource::kFromAppListRecommendation:
case apps::mojom::LaunchSource::kFromShelf:
break; break;
} }
......
...@@ -22,6 +22,8 @@ ash::ShelfLaunchSource ConvertLaunchSource( ...@@ -22,6 +22,8 @@ ash::ShelfLaunchSource ConvertLaunchSource(
case apps::mojom::LaunchSource::kFromAppListQueryContextMenu: case apps::mojom::LaunchSource::kFromAppListQueryContextMenu:
case apps::mojom::LaunchSource::kFromAppListRecommendation: case apps::mojom::LaunchSource::kFromAppListRecommendation:
return ash::LAUNCH_FROM_APP_LIST_SEARCH; return ash::LAUNCH_FROM_APP_LIST_SEARCH;
case apps::mojom::LaunchSource::kFromShelf:
return ash::LAUNCH_FROM_SHELF;
} }
} }
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include "base/test/bind_test_util.h" #include "base/test/bind_test_util.h"
#include "base/test/metrics/histogram_tester.h" #include "base/test/metrics/histogram_tester.h"
#include "chrome/app/chrome_command_ids.h" #include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/apps/app_service/app_service_proxy.h"
#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
#include "chrome/browser/apps/launch_service/launch_service.h" #include "chrome/browser/apps/launch_service/launch_service.h"
#include "chrome/browser/apps/platform_apps/app_browsertest_util.h" #include "chrome/browser/apps/platform_apps/app_browsertest_util.h"
#include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/login/demo_mode/demo_session.h"
...@@ -56,6 +58,7 @@ ...@@ -56,6 +58,7 @@
#include "chrome/browser/web_applications/system_web_app_manager.h" #include "chrome/browser/web_applications/system_web_app_manager.h"
#include "chrome/browser/web_applications/test/web_app_install_observer.h" #include "chrome/browser/web_applications/test/web_app_install_observer.h"
#include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_provider.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
#include "chrome/test/base/ui_test_utils.h" #include "chrome/test/base/ui_test_utils.h"
...@@ -306,6 +309,50 @@ class ShelfAppBrowserTest : public extensions::ExtensionBrowserTest { ...@@ -306,6 +309,50 @@ class ShelfAppBrowserTest : public extensions::ExtensionBrowserTest {
&index); &index);
} }
// Flush mojo calls to allow async callbacks to run.
void FlushMojoCallsForAppService() {
if (!base::FeatureList::IsEnabled(features::kAppServiceAsh) ||
!base::FeatureList::IsEnabled(features::kAppServiceShelf)) {
return;
}
apps::AppServiceProxy* proxy =
apps::AppServiceProxyFactory::GetForProfile(profile());
if (proxy) {
proxy->FlushMojoCallsForTesting();
}
}
// Launch the app and flush mojo calls to allow async callbacks to run.
void LaunchAppAndFlushMojoCallsForAppService(const ash::ShelfID& id,
ash::ShelfLaunchSource source,
int event_flags,
int64_t display_id) {
controller_->LaunchApp(ash::ShelfID(last_loaded_extension_id()),
ash::LAUNCH_FROM_UNKNOWN, 0,
display::kInvalidDisplayId);
FlushMojoCallsForAppService();
}
// Launch and activate the app, and flush mojo calls to allow async callbacks
// to run.
void ActivateAppAndFlushMojoCallsForAppService(const std::string& app_id,
ash::ShelfLaunchSource source,
int event_flags,
int64_t display_id) {
controller_->ActivateApp(app_id, ash::LAUNCH_FROM_UNKNOWN, 0,
display::kInvalidDisplayId);
FlushMojoCallsForAppService();
}
// Select an item and flush mojo calls to allow async callbacks to run.
void SelectItemAndFlushMojoCallsForAppService(
const ash::ShelfID& id,
ui::EventType event_type = ui::ET_MOUSE_PRESSED,
int64_t display_id = display::kInvalidDisplayId) {
SelectItem(id, event_type, display_id);
FlushMojoCallsForAppService();
}
ChromeLauncherController* controller_ = nullptr; ChromeLauncherController* controller_ = nullptr;
private: private:
...@@ -773,7 +820,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchPinned) { ...@@ -773,7 +820,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchPinned) {
int tab_count = tab_strip->count(); int tab_count = tab_strip->count();
ash::ShelfID shortcut_id = CreateShortcut("app1"); ash::ShelfID shortcut_id = CreateShortcut("app1");
EXPECT_EQ(ash::STATUS_CLOSED, shelf_model()->ItemByID(shortcut_id)->status); EXPECT_EQ(ash::STATUS_CLOSED, shelf_model()->ItemByID(shortcut_id)->status);
SelectItem(shortcut_id); SelectItemAndFlushMojoCallsForAppService(shortcut_id);
EXPECT_EQ(++tab_count, tab_strip->count()); EXPECT_EQ(++tab_count, tab_strip->count());
EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status); EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status);
WebContents* tab = tab_strip->GetActiveWebContents(); WebContents* tab = tab_strip->GetActiveWebContents();
...@@ -827,7 +874,8 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchAppFromDisplayWithoutFocus0) { ...@@ -827,7 +874,8 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchAppFromDisplayWithoutFocus0) {
// Launches an app from the shelf of display 0 and expects a new tab is opened // Launches an app from the shelf of display 0 and expects a new tab is opened
// in the uppermost browser in display 0. // in the uppermost browser in display 0.
ash::ShelfID shortcut_id = CreateShortcut("app1"); ash::ShelfID shortcut_id = CreateShortcut("app1");
SelectItem(shortcut_id, ui::ET_MOUSE_PRESSED, displays[1].id()); SelectItemAndFlushMojoCallsForAppService(shortcut_id, ui::ET_MOUSE_PRESSED,
displays[1].id());
EXPECT_EQ(browser0->tab_strip_model()->count(), 1); EXPECT_EQ(browser0->tab_strip_model()->count(), 1);
EXPECT_EQ(browser1->tab_strip_model()->count(), 1); EXPECT_EQ(browser1->tab_strip_model()->count(), 1);
EXPECT_EQ(browser2->tab_strip_model()->count(), 2); EXPECT_EQ(browser2->tab_strip_model()->count(), 2);
...@@ -865,7 +913,8 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchAppFromDisplayWithoutFocus1) { ...@@ -865,7 +913,8 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchAppFromDisplayWithoutFocus1) {
// Launches an app from the shelf of display 0 and expects a new browser with // Launches an app from the shelf of display 0 and expects a new browser with
// one tab is opened in display 0. // one tab is opened in display 0.
ash::ShelfID shortcut_id = CreateShortcut("app1"); ash::ShelfID shortcut_id = CreateShortcut("app1");
SelectItem(shortcut_id, ui::ET_MOUSE_PRESSED, displays[1].id()); SelectItemAndFlushMojoCallsForAppService(shortcut_id, ui::ET_MOUSE_PRESSED,
displays[1].id());
Browser* browser1 = browser_list->GetLastActive(); Browser* browser1 = browser_list->GetLastActive();
EXPECT_EQ(browser_list->size(), 2U); EXPECT_EQ(browser_list->size(), 2U);
EXPECT_NE(browser1, browser0); EXPECT_NE(browser1, browser0);
...@@ -917,7 +966,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchMaximized) { ...@@ -917,7 +966,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchMaximized) {
browser2->window()->Maximize(); browser2->window()->Maximize();
ash::ShelfID shortcut_id = CreateShortcut("app1"); ash::ShelfID shortcut_id = CreateShortcut("app1");
SelectItem(shortcut_id); SelectItemAndFlushMojoCallsForAppService(shortcut_id);
EXPECT_EQ(++tab_count, tab_strip->count()); EXPECT_EQ(++tab_count, tab_strip->count());
EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status); EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status);
...@@ -926,7 +975,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchMaximized) { ...@@ -926,7 +975,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchMaximized) {
EXPECT_FALSE(browser2->window()->IsActive()); EXPECT_FALSE(browser2->window()->IsActive());
// Selecting the shortcut activates the second window. // Selecting the shortcut activates the second window.
SelectItem(shortcut_id); SelectItemAndFlushMojoCallsForAppService(shortcut_id);
EXPECT_TRUE(browser2->window()->IsActive()); EXPECT_TRUE(browser2->window()->IsActive());
} }
...@@ -936,12 +985,11 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, ActivateApp) { ...@@ -936,12 +985,11 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, ActivateApp) {
int tab_count = tab_strip->count(); int tab_count = tab_strip->count();
const Extension* extension = const Extension* extension =
LoadExtension(test_data_dir_.AppendASCII("app1")); LoadExtension(test_data_dir_.AppendASCII("app1"));
ActivateAppAndFlushMojoCallsForAppService(
controller_->ActivateApp(extension->id(), ash::LAUNCH_FROM_UNKNOWN, 0, extension->id(), ash::LAUNCH_FROM_UNKNOWN, 0, display::kInvalidDisplayId);
display::kInvalidDisplayId);
EXPECT_EQ(++tab_count, tab_strip->count()); EXPECT_EQ(++tab_count, tab_strip->count());
controller_->ActivateApp(extension->id(), ash::LAUNCH_FROM_UNKNOWN, 0, ActivateAppAndFlushMojoCallsForAppService(
display::kInvalidDisplayId); extension->id(), ash::LAUNCH_FROM_UNKNOWN, 0, display::kInvalidDisplayId);
EXPECT_EQ(tab_count, tab_strip->count()); EXPECT_EQ(tab_count, tab_strip->count());
} }
...@@ -950,10 +998,10 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchApp) { ...@@ -950,10 +998,10 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, LaunchApp) {
TabStripModel* tab_strip = browser()->tab_strip_model(); TabStripModel* tab_strip = browser()->tab_strip_model();
int tab_count = tab_strip->count(); int tab_count = tab_strip->count();
ash::ShelfID id(LoadExtension(test_data_dir_.AppendASCII("app1"))->id()); ash::ShelfID id(LoadExtension(test_data_dir_.AppendASCII("app1"))->id());
controller_->LaunchApp(id, ash::LAUNCH_FROM_UNKNOWN, 0, LaunchAppAndFlushMojoCallsForAppService(id, ash::LAUNCH_FROM_UNKNOWN, 0,
display::kInvalidDisplayId); display::kInvalidDisplayId);
EXPECT_EQ(++tab_count, tab_strip->count()); EXPECT_EQ(++tab_count, tab_strip->count());
controller_->LaunchApp(id, ash::LAUNCH_FROM_UNKNOWN, 0, LaunchAppAndFlushMojoCallsForAppService(id, ash::LAUNCH_FROM_UNKNOWN, 0,
display::kInvalidDisplayId); display::kInvalidDisplayId);
EXPECT_EQ(++tab_count, tab_strip->count()); EXPECT_EQ(++tab_count, tab_strip->count());
} }
...@@ -1004,7 +1052,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, DemoModeAppLaunchSourceReported) { ...@@ -1004,7 +1052,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, DemoModeAppLaunchSourceReported) {
IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, Navigation) { IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, Navigation) {
ash::ShelfID shortcut_id = CreateShortcut("app1"); ash::ShelfID shortcut_id = CreateShortcut("app1");
EXPECT_EQ(ash::STATUS_CLOSED, shelf_model()->ItemByID(shortcut_id)->status); EXPECT_EQ(ash::STATUS_CLOSED, shelf_model()->ItemByID(shortcut_id)->status);
SelectItem(shortcut_id); SelectItemAndFlushMojoCallsForAppService(shortcut_id);
EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status); EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status);
// Navigate away. // Navigate away.
...@@ -1033,7 +1081,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, TabDragAndDrop) { ...@@ -1033,7 +1081,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, TabDragAndDrop) {
EXPECT_EQ(ash::STATUS_CLOSED, shelf_model()->ItemByID(shortcut_id)->status); EXPECT_EQ(ash::STATUS_CLOSED, shelf_model()->ItemByID(shortcut_id)->status);
// Activate app1 and check its item status. // Activate app1 and check its item status.
SelectItem(shortcut_id); SelectItemAndFlushMojoCallsForAppService(shortcut_id);
EXPECT_EQ(2, tab_strip_model1->count()); EXPECT_EQ(2, tab_strip_model1->count());
EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->items()[browser_index].status); EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->items()[browser_index].status);
EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status); EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status);
...@@ -1080,7 +1128,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, RefocusFilterLaunch) { ...@@ -1080,7 +1128,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, RefocusFilterLaunch) {
// Activating app should launch new tab, because second tab isn't // Activating app should launch new tab, because second tab isn't
// in its refocus url path. // in its refocus url path.
SelectItem(shortcut_id); SelectItemAndFlushMojoCallsForAppService(shortcut_id);
EXPECT_EQ(++tab_count, tab_strip->count()); EXPECT_EQ(++tab_count, tab_strip->count());
WebContents* second_tab = tab_strip->GetActiveWebContents(); WebContents* second_tab = tab_strip->GetActiveWebContents();
EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status); EXPECT_EQ(ash::STATUS_RUNNING, shelf_model()->ItemByID(shortcut_id)->status);
...@@ -1674,7 +1722,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, MatchingShelfIDandActiveTab) { ...@@ -1674,7 +1722,7 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, MatchingShelfIDandActiveTab) {
EXPECT_EQ(2, shelf_model()->item_count()); EXPECT_EQ(2, shelf_model()->item_count());
// Create and activate a new tab for "app1" and expect an application ShelfID. // Create and activate a new tab for "app1" and expect an application ShelfID.
SelectItem(app_id); SelectItemAndFlushMojoCallsForAppService(app_id);
EXPECT_EQ(2, browser()->tab_strip_model()->count()); EXPECT_EQ(2, browser()->tab_strip_model()->count());
EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
id = ash::ShelfID::Deserialize(window->GetProperty(ash::kShelfIDKey)); id = ash::ShelfID::Deserialize(window->GetProperty(ash::kShelfIDKey));
...@@ -1860,9 +1908,11 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, WindowedHostedAndBookmarkApps) { ...@@ -1860,9 +1908,11 @@ IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, WindowedHostedAndBookmarkApps) {
shelf_model()->ItemByID(bookmark_app_shelf_id)->status); shelf_model()->ItemByID(bookmark_app_shelf_id)->status);
// Now use the launcher controller to activate the apps. // Now use the launcher controller to activate the apps.
controller_->ActivateApp(hosted_app->id(), ash::LAUNCH_FROM_APP_LIST, 0, ActivateAppAndFlushMojoCallsForAppService(hosted_app->id(),
ash::LAUNCH_FROM_APP_LIST, 0,
display::kInvalidDisplayId); display::kInvalidDisplayId);
controller_->ActivateApp(bookmark_app->id(), ash::LAUNCH_FROM_APP_LIST, 0, ActivateAppAndFlushMojoCallsForAppService(bookmark_app->id(),
ash::LAUNCH_FROM_APP_LIST, 0,
display::kInvalidDisplayId); display::kInvalidDisplayId);
// There should be two new browsers. // There should be two new browsers.
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#include <vector> #include <vector>
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/browser/apps/app_service/app_service_proxy.h"
#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
#include "chrome/browser/apps/launch_service/launch_service.h" #include "chrome/browser/apps/launch_service/launch_service.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_session_manager.h"
...@@ -30,6 +32,7 @@ ...@@ -30,6 +32,7 @@
#include "chrome/browser/ui/extensions/extension_enable_flow.h" #include "chrome/browser/ui/extensions/extension_enable_flow.h"
#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_helpers.h"
#include "chrome/browser/web_applications/extensions/bookmark_app_util.h" #include "chrome/browser/web_applications/extensions/bookmark_app_util.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
#include "components/arc/arc_util.h" #include "components/arc/arc_util.h"
#include "components/arc/metrics/arc_metrics_constants.h" #include "components/arc/metrics/arc_metrics_constants.h"
...@@ -211,6 +214,15 @@ void LauncherControllerHelper::LaunchApp(const ash::ShelfID& id, ...@@ -211,6 +214,15 @@ void LauncherControllerHelper::LaunchApp(const ash::ShelfID& id,
} }
const std::string& app_id = id.app_id; const std::string& app_id = id.app_id;
if (base::FeatureList::IsEnabled(features::kAppServiceShelf)) {
apps::AppServiceProxy* proxy =
apps::AppServiceProxyFactory::GetForProfile(profile_);
DCHECK(proxy);
proxy->Launch(app_id, event_flags, apps::mojom::LaunchSource::kFromShelf,
display_id);
return;
}
const ArcAppListPrefs* arc_prefs = GetArcAppListPrefs(); const ArcAppListPrefs* arc_prefs = GetArcAppListPrefs();
if (arc_prefs && arc_prefs->IsRegistered(app_id)) { if (arc_prefs && arc_prefs->IsRegistered(app_id)) {
arc::LaunchApp(profile_, app_id, event_flags, arc::LaunchApp(profile_, app_id, event_flags,
......
...@@ -161,6 +161,7 @@ enum LaunchSource { ...@@ -161,6 +161,7 @@ enum LaunchSource {
kFromAppListQueryContextMenu, // Query-dependent results; context menu. kFromAppListQueryContextMenu, // Query-dependent results; context menu.
kFromAppListRecommendation, // Query-less recommendations (smaller icons). kFromAppListRecommendation, // Query-less recommendations (smaller icons).
kFromParentalControls, // Parental Controls Settings Section. kFromParentalControls, // Parental Controls Settings Section.
kFromShelf, // Shelf.
}; };
enum TriState { enum TriState {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment