Index: chrome/browser/extensions/api/management/management_api.cc |
=================================================================== |
--- chrome/browser/extensions/api/management/management_api.cc (revision 274309) |
+++ chrome/browser/extensions/api/management/management_api.cc (working copy) |
@@ -25,6 +25,7 @@ |
#include "chrome/browser/extensions/extension_ui_util.h" |
#include "chrome/browser/extensions/extension_uninstall_dialog.h" |
#include "chrome/browser/extensions/launch_util.h" |
+#include "chrome/browser/favicon/favicon_service_factory.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser_dialogs.h" |
#include "chrome/browser/ui/browser_finder.h" |
@@ -56,6 +57,7 @@ |
#include "extensions/common/permissions/permission_set.h" |
#include "extensions/common/permissions/permissions_data.h" |
#include "extensions/common/url_pattern.h" |
+#include "ui/gfx/favicon_size.h" |
#if !defined(OS_ANDROID) |
#include "chrome/browser/ui/webui/ntp/core_app_launcher_handler.h" |
@@ -852,6 +854,91 @@ |
return true; |
} |
+ManagementGenerateAppForLinkFunction::ManagementGenerateAppForLinkFunction() { |
+} |
+ |
+ManagementGenerateAppForLinkFunction::~ManagementGenerateAppForLinkFunction() { |
+} |
+ |
+void ManagementGenerateAppForLinkFunction::FinishCreateBookmarkApp( |
+ const extensions::Extension* extension, |
+ const WebApplicationInfo& web_app_info) { |
+ if (extension) { |
+ scoped_ptr<management::ExtensionInfo> info = |
+ CreateExtensionInfo(*extension, ExtensionSystem::Get(GetProfile())); |
+ results_ = management::GenerateAppForLink::Results::Create(*info); |
+ |
+ SendResponse(true); |
+ Release(); |
+ } else { |
+ error_ = keys::kGenerateAppForLinkInstallError; |
+ SendResponse(false); |
+ Release(); |
+ } |
+} |
+ |
+void ManagementGenerateAppForLinkFunction::OnFaviconForApp( |
+ const favicon_base::FaviconImageResult& image_result) { |
+ WebApplicationInfo web_app; |
+ web_app.title = base::UTF8ToUTF16(title_); |
+ web_app.app_url = launch_url_; |
+ |
+ if (!image_result.image.IsEmpty()) { |
+ WebApplicationInfo::IconInfo icon; |
+ icon.data = image_result.image.AsBitmap(); |
+ icon.width = icon.data.width(); |
+ icon.height = icon.data.height(); |
+ web_app.icons.push_back(icon); |
+ } |
+ |
+ bookmark_app_helper_.reset(new BookmarkAppHelper(service(), web_app, NULL)); |
+ bookmark_app_helper_->Create(base::Bind( |
+ &ManagementGenerateAppForLinkFunction::FinishCreateBookmarkApp, this)); |
+} |
+ |
+bool ManagementGenerateAppForLinkFunction::RunAsync() { |
+ if (!user_gesture()) { |
+ error_ = keys::kGestureNeededForGenerateAppForLinkError; |
+ return false; |
+ } |
+ |
+ scoped_ptr<management::GenerateAppForLink::Params> params( |
+ management::GenerateAppForLink::Params::Create(*args_)); |
+ EXTENSION_FUNCTION_VALIDATE(params.get()); |
+ |
+ GURL launch_url(params->url); |
+ if (!launch_url.is_valid() || !launch_url.SchemeIsHTTPOrHTTPS()) { |
+ error_ = ErrorUtils::FormatErrorMessage(keys::kInvalidURLError, |
+ params->url); |
+ return false; |
+ } |
+ |
+ if (params->title.empty()) { |
+ error_ = keys::kEmptyTitleError; |
+ return false; |
+ } |
+ |
+ FaviconService* favicon_service = |
+ FaviconServiceFactory::GetForProfile(GetProfile(), |
+ Profile::EXPLICIT_ACCESS); |
+ DCHECK(favicon_service); |
+ |
+ title_ = params->title; |
+ launch_url_ = launch_url; |
+ |
+ favicon_service->GetFaviconImageForURL( |
+ FaviconService::FaviconForURLParams( |
+ launch_url, favicon_base::FAVICON, gfx::kFaviconSize), |
+ base::Bind(&ManagementGenerateAppForLinkFunction::OnFaviconForApp, this), |
+ &cancelable_task_tracker_); |
+ |
+ // Matched with a Release() in OnExtensionLoaded(). |
+ AddRef(); |
+ |
+ // Response is sent async in OnExtensionLoaded(). |
+ return true; |
+} |
+ |
ManagementEventRouter::ManagementEventRouter(Profile* profile) |
: profile_(profile) { |
int types[] = {chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED, |