Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(545)

Side by Side Diff: chrome/browser/ui/webui/ntp/app_launcher_handler.cc

Issue 7677032: ntp4: make app-install-via-drag less janky (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more test fixes Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/webui/ntp/app_launcher_handler.h" 5 #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 extension->location() == Extension::COMPONENT); 149 extension->location() == Extension::COMPONENT);
150 value->SetBoolean("is_webstore", 150 value->SetBoolean("is_webstore",
151 extension->id() == extension_misc::kWebStoreAppId); 151 extension->id() == extension_misc::kWebStoreAppId);
152 152
153 if (notification) 153 if (notification)
154 value->Set("notification", SerializeNotification(*notification)); 154 value->Set("notification", SerializeNotification(*notification));
155 155
156 int app_launch_index = prefs->GetAppLaunchIndex(extension->id()); 156 int app_launch_index = prefs->GetAppLaunchIndex(extension->id());
157 if (app_launch_index == -1) { 157 if (app_launch_index == -1) {
158 // Make sure every app has a launch index (some predate the launch index). 158 // Make sure every app has a launch index (some predate the launch index).
159 app_launch_index = prefs->GetNextAppLaunchIndex(); 159 app_launch_index = prefs->GetNextAppLaunchIndex(0);
160 prefs->SetAppLaunchIndex(extension->id(), app_launch_index); 160 prefs->SetAppLaunchIndex(extension->id(), app_launch_index);
161 } 161 }
162 value->SetInteger("app_launch_index", app_launch_index); 162 value->SetInteger("app_launch_index", app_launch_index);
163 163
164 int page_index = prefs->GetPageIndex(extension->id()); 164 int page_index = prefs->GetPageIndex(extension->id());
165 if (page_index >= 0) { 165 if (page_index >= 0) {
166 // Only provide a value if one is stored 166 // Only provide a value if one is stored
167 value->SetInteger("page_index", page_index); 167 value->SetInteger("page_index", page_index);
168 } 168 }
169 } 169 }
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 AutoReset<bool> auto_reset(&ignore_changes_, true); 683 AutoReset<bool> auto_reset(&ignore_changes_, true);
684 PrefService* prefs = Profile::FromWebUI(web_ui_)->GetPrefs(); 684 PrefService* prefs = Profile::FromWebUI(web_ui_)->GetPrefs();
685 ListPrefUpdate update(prefs, prefs::kNTPAppPageNames); 685 ListPrefUpdate update(prefs, prefs::kNTPAppPageNames);
686 ListValue* list = update.Get(); 686 ListValue* list = update.Get();
687 list->Set(static_cast<size_t>(page_index), Value::CreateStringValue(name)); 687 list->Set(static_cast<size_t>(page_index), Value::CreateStringValue(name));
688 } 688 }
689 689
690 void AppLauncherHandler::HandleGenerateAppForLink(const ListValue* args) { 690 void AppLauncherHandler::HandleGenerateAppForLink(const ListValue* args) {
691 std::string url; 691 std::string url;
692 CHECK(args->GetString(0, &url)); 692 CHECK(args->GetString(0, &url));
693 GURL launch_url(url);
693 694
694 string16 title; 695 string16 title;
695 CHECK(args->GetString(1, &title)); 696 CHECK(args->GetString(1, &title));
696 697
697 GURL launch_url(url); 698 double page_index;
698 699 CHECK(args->GetDouble(2, &page_index));
699 scoped_ptr<WebApplicationInfo> web_app(new WebApplicationInfo);
700 web_app->is_bookmark_app = true;
701 web_app->title = title;
702 web_app->app_url = launch_url;
703 700
704 Profile* profile = Profile::FromWebUI(web_ui_); 701 Profile* profile = Profile::FromWebUI(web_ui_);
705 FaviconService* favicon_service = 702 FaviconService* favicon_service =
706 profile->GetFaviconService(Profile::EXPLICIT_ACCESS); 703 profile->GetFaviconService(Profile::EXPLICIT_ACCESS);
707 if (!favicon_service) { 704 if (!favicon_service) {
708 LOG(ERROR) << "No favicon service"; 705 LOG(ERROR) << "No favicon service";
709 scoped_refptr<CrxInstaller> installer(
710 extension_service_->MakeCrxInstaller(NULL));
711 installer->InstallWebApp(*web_app);
712 return; 706 return;
713 } 707 }
714 708
709 scoped_ptr<AppInstallInfo> install_info(new AppInstallInfo());
710 install_info->is_bookmark_app = true;
711 install_info->title = title;
712 install_info->app_url = launch_url;
713 install_info->page_index = static_cast<int>(page_index);
714
715 FaviconService::Handle h = favicon_service->GetFaviconForURL( 715 FaviconService::Handle h = favicon_service->GetFaviconForURL(
716 launch_url, history::FAVICON, &favicon_consumer_, 716 launch_url, history::FAVICON, &favicon_consumer_,
717 NewCallback(this, &AppLauncherHandler::OnFaviconForApp)); 717 NewCallback(this, &AppLauncherHandler::OnFaviconForApp));
718 favicon_consumer_.SetClientData(favicon_service, h, web_app.release()); 718 favicon_consumer_.SetClientData(favicon_service, h, install_info.release());
719 } 719 }
720 720
721 void AppLauncherHandler::HandleRecordAppLaunchByURL( 721 void AppLauncherHandler::HandleRecordAppLaunchByURL(
722 const base::ListValue* args) { 722 const base::ListValue* args) {
723 std::string url; 723 std::string url;
724 CHECK(args->GetString(0, &url)); 724 CHECK(args->GetString(0, &url));
725 double source; 725 double source;
726 CHECK(args->GetDouble(1, &source)); 726 CHECK(args->GetDouble(1, &source));
727 727
728 extension_misc::AppLaunchBucket bucket = 728 extension_misc::AppLaunchBucket bucket =
729 static_cast<extension_misc::AppLaunchBucket>(static_cast<int>(source)); 729 static_cast<extension_misc::AppLaunchBucket>(static_cast<int>(source));
730 CHECK(source < extension_misc::APP_LAUNCH_BUCKET_BOUNDARY); 730 CHECK(source < extension_misc::APP_LAUNCH_BUCKET_BOUNDARY);
731 731
732 RecordAppLaunchByURL(Profile::FromWebUI(web_ui_), url, bucket); 732 RecordAppLaunchByURL(Profile::FromWebUI(web_ui_), url, bucket);
733 } 733 }
734 734
735 void AppLauncherHandler::OnFaviconForApp(FaviconService::Handle handle, 735 void AppLauncherHandler::OnFaviconForApp(FaviconService::Handle handle,
736 history::FaviconData data) { 736 history::FaviconData data) {
737 scoped_ptr<WebApplicationInfo> web_app( 737 scoped_ptr<AppInstallInfo> install_info(
738 favicon_consumer_.GetClientDataForCurrentRequest()); 738 favicon_consumer_.GetClientDataForCurrentRequest());
739 scoped_ptr<WebApplicationInfo> web_app(new WebApplicationInfo());
740 web_app->is_bookmark_app = install_info->is_bookmark_app;
741 web_app->title = install_info->title;
742 web_app->app_url = install_info->app_url;
743
739 WebApplicationInfo::IconInfo icon; 744 WebApplicationInfo::IconInfo icon;
740 web_app->icons.push_back(icon); 745 web_app->icons.push_back(icon);
741 if (data.is_valid() && gfx::PNGCodec::Decode(data.image_data->front(), 746 if (data.is_valid() && gfx::PNGCodec::Decode(data.image_data->front(),
742 data.image_data->size(), 747 data.image_data->size(),
743 &(web_app->icons[0].data))) { 748 &(web_app->icons[0].data))) {
744 web_app->icons[0].url = GURL(); 749 web_app->icons[0].url = GURL();
745 web_app->icons[0].width = web_app->icons[0].data.width(); 750 web_app->icons[0].width = web_app->icons[0].data.width();
746 web_app->icons[0].height = web_app->icons[0].data.height(); 751 web_app->icons[0].height = web_app->icons[0].data.height();
747 } else { 752 } else {
748 web_app->icons.clear(); 753 web_app->icons.clear();
749 } 754 }
750 755
751 scoped_refptr<CrxInstaller> installer( 756 scoped_refptr<CrxInstaller> installer(
752 extension_service_->MakeCrxInstaller(NULL)); 757 extension_service_->MakeCrxInstaller(NULL));
758 installer->set_page_index(install_info->page_index);
753 installer->InstallWebApp(*web_app); 759 installer->InstallWebApp(*web_app);
754 } 760 }
755 761
756 // static 762 // static
757 void AppLauncherHandler::RegisterUserPrefs(PrefService* pref_service) { 763 void AppLauncherHandler::RegisterUserPrefs(PrefService* pref_service) {
758 // TODO(csilv): We will want this to be a syncable preference instead. 764 // TODO(csilv): We will want this to be a syncable preference instead.
759 pref_service->RegisterListPref(prefs::kNTPAppPageNames, 765 pref_service->RegisterListPref(prefs::kNTPAppPageNames,
760 PrefService::UNSYNCABLE_PREF); 766 PrefService::UNSYNCABLE_PREF);
761 } 767 }
762 768
763 // static 769 // statiic
764 void AppLauncherHandler::RecordWebStoreLaunch(bool promo_active) { 770 void AppLauncherHandler::RecordWebStoreLaunch(bool promo_active) {
765 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppLaunchHistogram, 771 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppLaunchHistogram,
766 extension_misc::APP_LAUNCH_NTP_WEBSTORE, 772 extension_misc::APP_LAUNCH_NTP_WEBSTORE,
767 extension_misc::APP_LAUNCH_BUCKET_BOUNDARY); 773 extension_misc::APP_LAUNCH_BUCKET_BOUNDARY);
768 774
769 if (!promo_active) return; 775 if (!promo_active) return;
770 776
771 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppsPromoHistogram, 777 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppsPromoHistogram,
772 extension_misc::PROMO_LAUNCH_WEB_STORE, 778 extension_misc::PROMO_LAUNCH_WEB_STORE,
773 extension_misc::PROMO_BUCKET_BOUNDARY); 779 extension_misc::PROMO_BUCKET_BOUNDARY);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 917
912 void AppLauncherHandler::UninstallDefaultApps() { 918 void AppLauncherHandler::UninstallDefaultApps() {
913 AppsPromo* apps_promo = extension_service_->apps_promo(); 919 AppsPromo* apps_promo = extension_service_->apps_promo();
914 const ExtensionIdSet& app_ids = apps_promo->old_default_apps(); 920 const ExtensionIdSet& app_ids = apps_promo->old_default_apps();
915 for (ExtensionIdSet::const_iterator iter = app_ids.begin(); 921 for (ExtensionIdSet::const_iterator iter = app_ids.begin();
916 iter != app_ids.end(); ++iter) { 922 iter != app_ids.end(); ++iter) {
917 if (extension_service_->GetExtensionById(*iter, true)) 923 if (extension_service_->GetExtensionById(*iter, true))
918 extension_service_->UninstallExtension(*iter, false, NULL); 924 extension_service_->UninstallExtension(*iter, false, NULL);
919 } 925 }
920 } 926 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698