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

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

Issue 9370013: Simplify the handling of crashed extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 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) 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/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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 (extension->id() == extension_misc::kCloudPrintAppId)) { 104 (extension->id() == extension_misc::kCloudPrintAppId)) {
105 return true; 105 return true;
106 } 106 }
107 return false; 107 return false;
108 } 108 }
109 109
110 void AppLauncherHandler::CreateAppInfo(const Extension* extension, 110 void AppLauncherHandler::CreateAppInfo(const Extension* extension,
111 const AppNotification* notification, 111 const AppNotification* notification,
112 ExtensionService* service, 112 ExtensionService* service,
113 DictionaryValue* value) { 113 DictionaryValue* value) {
114 bool enabled = service->IsExtensionEnabled(extension->id()) && 114 bool enabled = service->IsExtensionEnabled(extension->id());
115 !service->GetTerminatedExtension(extension->id());
116 bool icon_big_exists = true; 115 bool icon_big_exists = true;
117 // Instead of setting grayscale here, we do it in apps_page.js. 116 // Instead of setting grayscale here, we do it in apps_page.js.
118 GURL icon_big = 117 GURL icon_big =
119 ExtensionIconSource::GetIconURL(extension, 118 ExtensionIconSource::GetIconURL(extension,
120 Extension::EXTENSION_ICON_LARGE, 119 Extension::EXTENSION_ICON_LARGE,
121 ExtensionIconSet::MATCH_EXACTLY, 120 ExtensionIconSet::MATCH_EXACTLY,
122 false, &icon_big_exists); 121 false, &icon_big_exists);
123 bool icon_small_exists = true; 122 bool icon_small_exists = true;
124 GURL icon_small = 123 GURL icon_small =
125 ExtensionIconSource::GetIconURL(extension, 124 ExtensionIconSource::GetIconURL(extension,
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 if (!IsAppExcludedFromList(*it)) { 370 if (!IsAppExcludedFromList(*it)) {
372 DictionaryValue* app_info = new DictionaryValue(); 371 DictionaryValue* app_info = new DictionaryValue();
373 CreateAppInfo(*it, 372 CreateAppInfo(*it,
374 NULL, 373 NULL,
375 extension_service_, 374 extension_service_,
376 app_info); 375 app_info);
377 list->Append(app_info); 376 list->Append(app_info);
378 } 377 }
379 } 378 }
380 379
381 extensions = extension_service_->terminated_extensions();
382 for (it = extensions->begin(); it != extensions->end(); ++it) {
383 if (!IsAppExcludedFromList(*it)) {
384 DictionaryValue* app_info = new DictionaryValue();
385 CreateAppInfo(*it,
386 NULL,
387 extension_service_,
388 app_info);
389 list->Append(app_info);
390 }
391 }
392
393 dictionary->Set("apps", list); 380 dictionary->Set("apps", list);
394 381
395 // TODO(estade): remove these settings when the old NTP is removed. The new 382 // TODO(estade): remove these settings when the old NTP is removed. The new
396 // NTP does it in js. 383 // NTP does it in js.
397 #if defined(OS_MACOSX) 384 #if defined(OS_MACOSX)
398 // App windows are not yet implemented on mac. 385 // App windows are not yet implemented on mac.
399 dictionary->SetBoolean("disableAppWindowLaunch", true); 386 dictionary->SetBoolean("disableAppWindowLaunch", true);
400 dictionary->SetBoolean("disableCreateAppShortcut", true); 387 dictionary->SetBoolean("disableCreateAppShortcut", true);
401 #endif 388 #endif
402 389
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 if (!profile->GetExtensionService()->IsInstalledApp(url)) 868 if (!profile->GetExtensionService()->IsInstalledApp(url))
882 return; 869 return;
883 870
884 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppLaunchHistogram, bucket, 871 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppLaunchHistogram, bucket,
885 extension_misc::APP_LAUNCH_BUCKET_BOUNDARY); 872 extension_misc::APP_LAUNCH_BUCKET_BOUNDARY);
886 } 873 }
887 874
888 void AppLauncherHandler::PromptToEnableApp(const std::string& extension_id) { 875 void AppLauncherHandler::PromptToEnableApp(const std::string& extension_id) {
889 const Extension* extension = 876 const Extension* extension =
890 extension_service_->GetExtensionById(extension_id, true); 877 extension_service_->GetExtensionById(extension_id, true);
891 if (!extension) { 878 // It's possible (though unlikely) the app could have been uninstalled since
892 extension = extension_service_->GetTerminatedExtension(extension_id); 879 // the user clicked on it.
893 // It's possible (though unlikely) the app could have been uninstalled since 880 if (!extension)
894 // the user clicked on it. 881 return;
895 if (!extension)
896 return;
897 // If the app was terminated, reload it first. (This reallocates the
898 // Extension object.)
899 extension_service_->ReloadExtension(extension_id);
900 extension = extension_service_->GetExtensionById(extension_id, true);
901 }
902 882
903 ExtensionPrefs* extension_prefs = extension_service_->extension_prefs(); 883 ExtensionPrefs* extension_prefs = extension_service_->extension_prefs();
904 if (!extension_prefs->DidExtensionEscalatePermissions(extension_id)) { 884 if (!extension_prefs->DidExtensionEscalatePermissions(extension_id)) {
905 // Enable the extension immediately if its privileges weren't escalated. 885 // Enable the extension immediately if its privileges weren't escalated.
906 // This is a no-op if the extension was previously terminated.
907 extension_service_->EnableExtension(extension_id); 886 extension_service_->EnableExtension(extension_id);
908 887
909 // Launch app asynchronously so the image will update. 888 // Launch app asynchronously so the image will update.
910 StringValue app_id(extension_id); 889 StringValue app_id(extension_id);
911 web_ui()->CallJavascriptFunction("launchAppAfterEnable", app_id); 890 web_ui()->CallJavascriptFunction("launchAppAfterEnable", app_id);
912 return; 891 return;
913 } 892 }
914 893
915 if (!extension_id_prompting_.empty()) 894 if (!extension_id_prompting_.empty())
916 return; // Only one prompt at a time. 895 return; // Only one prompt at a time.
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 973
995 void AppLauncherHandler::UninstallDefaultApps() { 974 void AppLauncherHandler::UninstallDefaultApps() {
996 AppsPromo* apps_promo = extension_service_->apps_promo(); 975 AppsPromo* apps_promo = extension_service_->apps_promo();
997 const ExtensionIdSet& app_ids = apps_promo->old_default_apps(); 976 const ExtensionIdSet& app_ids = apps_promo->old_default_apps();
998 for (ExtensionIdSet::const_iterator iter = app_ids.begin(); 977 for (ExtensionIdSet::const_iterator iter = app_ids.begin();
999 iter != app_ids.end(); ++iter) { 978 iter != app_ids.end(); ++iter) {
1000 if (extension_service_->GetExtensionById(*iter, true)) 979 if (extension_service_->GetExtensionById(*iter, true))
1001 extension_service_->UninstallExtension(*iter, false, NULL); 980 extension_service_->UninstallExtension(*iter, false, NULL);
1002 } 981 }
1003 } 982 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698