| Index: chrome/browser/ui/app_list/arc/arc_app_utils.cc | 
| diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.cc b/chrome/browser/ui/app_list/arc/arc_app_utils.cc | 
| index 3535fd77b1291f5be071671d43a4528f5a2dd95e..2ce1617e72ee8a57f8d1b875c17c77f75b5be6a5 100644 | 
| --- a/chrome/browser/ui/app_list/arc/arc_app_utils.cc | 
| +++ b/chrome/browser/ui/app_list/arc/arc_app_utils.cc | 
| @@ -6,6 +6,7 @@ | 
|  | 
| #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" | 
| #include "components/arc/arc_bridge_service.h" | 
| +#include "mojo/public/cpp/bindings/string.h" | 
|  | 
| namespace arc { | 
|  | 
| @@ -20,12 +21,12 @@ bool LaunchApp(content::BrowserContext* context, const std::string& app_id) { | 
|  | 
| scoped_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id); | 
| if (!app_info) { | 
| -    VLOG(2) << "Cannot launch unavailable app:" << app_id << "."; | 
| +    VLOG(2) << "Cannot launch unavailable app: " << app_id << "."; | 
| return false; | 
| } | 
|  | 
| if (!app_info->ready) { | 
| -    VLOG(2) << "Cannot launch not-ready app:" << app_id << "."; | 
| +    VLOG(2) << "Cannot launch not-ready app: " << app_id << "."; | 
| return false; | 
| } | 
|  | 
| @@ -61,7 +62,7 @@ bool LaunchApp(content::BrowserContext* context, const std::string& app_id) { | 
| bool CanHandleResolution(content::BrowserContext* context, | 
| const std::string& app_id, | 
| const gfx::Rect& rect, | 
| -    const CanHandleResolutionCallback callback) { | 
| +    const CanHandleResolutionCallback& callback) { | 
| ArcAppListPrefs* prefs = ArcAppListPrefs::Get(context); | 
| scoped_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id); | 
| if (!app_info) { | 
| @@ -98,4 +99,37 @@ bool CanHandleResolution(content::BrowserContext* context, | 
| return true; | 
| } | 
|  | 
| +bool UninstallApp(const std::string& package_name, | 
| +                  const UninstallAppCallback& callback) { | 
| +  VLOG(2) << "Uninstalling " << package_name; | 
| +  arc::ArcBridgeService* bridge_service = arc::ArcBridgeService::Get(); | 
| +  if (!bridge_service) { | 
| +    VLOG(2) << "Request to uninstall app when bridge service is not ready: " | 
| +            << package_name << "."; | 
| +    return false; | 
| +  } | 
| +  arc::AppInstance* app_instance = bridge_service->app_instance(); | 
| +  if (!app_instance) { | 
| +    VLOG(2) << "Request to uninstall app when bridge service is not ready: " | 
| +            << package_name << "."; | 
| +    return false; | 
| +  } | 
| + | 
| +  if (bridge_service->app_version() < 2) { | 
| +    LOG(ERROR) << "Request to uninstall app when version " | 
| +               << bridge_service->app_version() << " does not support it"; | 
| +    return false; | 
| +  } | 
| + | 
| +  app_instance->UninstallApp(package_name, callback); | 
| +  return true; | 
| +} | 
| + | 
| +void OnUninstallAppResponse(const mojo::String& error_message) { | 
| +  if (!error_message.is_null()) { | 
| +    // TODO(victorhsieh): Notify user about the error. | 
| +    LOG(ERROR) << "Failed to uninstall package: " << error_message.get(); | 
| +  } | 
| +} | 
| + | 
| }  // namespace arc | 
|  |