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

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

Issue 8785016: Add menu option for disabling app notifications (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 ExtensionPrefs* prefs = service->extension_prefs(); 143 ExtensionPrefs* prefs = service->extension_prefs();
144 value->SetInteger("launch_type", 144 value->SetInteger("launch_type",
145 prefs->GetLaunchType(extension->id(), 145 prefs->GetLaunchType(extension->id(),
146 ExtensionPrefs::LAUNCH_DEFAULT)); 146 ExtensionPrefs::LAUNCH_DEFAULT));
147 value->SetBoolean("offline_enabled", extension->offline_enabled()); 147 value->SetBoolean("offline_enabled", extension->offline_enabled());
148 value->SetBoolean("is_component", 148 value->SetBoolean("is_component",
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 (extension->HasAPIPermission(ExtensionAPIPermission::kAppNotifications)) {
154 ExtensionPrefs* prefs = service->extension_prefs();
155 value->SetBoolean("notifications_disabled",
156 prefs->IsAppNotificationDisabled(extension->id()));
157 }
158
153 if (notification) 159 if (notification)
154 value->Set("notification", SerializeNotification(*notification)); 160 value->Set("notification", SerializeNotification(*notification));
155 161
156 int app_launch_index = prefs->GetAppLaunchIndex(extension->id()); 162 int app_launch_index = prefs->GetAppLaunchIndex(extension->id());
157 if (app_launch_index == -1) { 163 if (app_launch_index == -1) {
158 // Make sure every app has a launch index (some predate the launch index). 164 // Make sure every app has a launch index (some predate the launch index).
159 // The webstore's app launch index is set to -2 to make sure it's first. 165 // The webstore's app launch index is set to -2 to make sure it's first.
160 // The next time the user drags (any) app this will be set to something 166 // The next time the user drags (any) app this will be set to something
161 // sane (i.e. >= 0). 167 // sane (i.e. >= 0).
162 app_launch_index = extension->id() == extension_misc::kWebStoreAppId ? 168 app_launch_index = extension->id() == extension_misc::kWebStoreAppId ?
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 base::Unretained(this))); 221 base::Unretained(this)));
216 web_ui_->RegisterMessageCallback("generateAppForLink", 222 web_ui_->RegisterMessageCallback("generateAppForLink",
217 base::Bind(&AppLauncherHandler::HandleGenerateAppForLink, 223 base::Bind(&AppLauncherHandler::HandleGenerateAppForLink,
218 base::Unretained(this))); 224 base::Unretained(this)));
219 web_ui_->RegisterMessageCallback("recordAppLaunchByURL", 225 web_ui_->RegisterMessageCallback("recordAppLaunchByURL",
220 base::Bind(&AppLauncherHandler::HandleRecordAppLaunchByURL, 226 base::Bind(&AppLauncherHandler::HandleRecordAppLaunchByURL,
221 base::Unretained(this))); 227 base::Unretained(this)));
222 web_ui_->RegisterMessageCallback("closeNotification", 228 web_ui_->RegisterMessageCallback("closeNotification",
223 base::Bind(&AppLauncherHandler::HandleNotificationClose, 229 base::Bind(&AppLauncherHandler::HandleNotificationClose,
224 base::Unretained(this))); 230 base::Unretained(this)));
231 web_ui_->RegisterMessageCallback("setNotificationsDisabled",
232 base::Bind(&AppLauncherHandler::HandleSetNotificationsDisabled,
233 base::Unretained(this)));
225 } 234 }
226 235
227 void AppLauncherHandler::Observe(int type, 236 void AppLauncherHandler::Observe(int type,
228 const content::NotificationSource& source, 237 const content::NotificationSource& source,
229 const content::NotificationDetails& details) { 238 const content::NotificationDetails& details) {
230 if (type == chrome::NOTIFICATION_APP_INSTALLED_TO_NTP) { 239 if (type == chrome::NOTIFICATION_APP_INSTALLED_TO_NTP) {
231 highlight_app_id_ = *content::Details<const std::string>(details).ptr(); 240 highlight_app_id_ = *content::Details<const std::string>(details).ptr();
232 if (has_loaded_apps_) 241 if (has_loaded_apps_)
233 SetAppToBeHighlighted(); 242 SetAppToBeHighlighted();
234 return; 243 return;
235 } 244 }
236 245
237 if (ignore_changes_ || !has_loaded_apps_) 246 if (ignore_changes_ || !has_loaded_apps_)
238 return; 247 return;
239 248
240 switch (type) { 249 switch (type) {
241 case chrome::NOTIFICATION_APP_NOTIFICATION_STATE_CHANGED: { 250 case chrome::NOTIFICATION_APP_NOTIFICATION_STATE_CHANGED: {
242 Profile* profile = content::Source<Profile>(source).ptr();
243 if (!Profile::FromWebUI(web_ui_)->IsSameProfile(profile))
244 return;
245
246 const std::string& id = 251 const std::string& id =
247 *content::Details<const std::string>(details).ptr(); 252 *content::Details<const std::string>(details).ptr();
248 const AppNotification* notification = 253 const AppNotification* notification =
249 extension_service_->app_notification_manager()->GetLast(id); 254 extension_service_->app_notification_manager()->GetLast(id);
250 base::StringValue id_value(id); 255 base::StringValue id_value(id);
251 if (notification) { 256 if (notification) {
252 scoped_ptr<DictionaryValue> notification_value( 257 scoped_ptr<DictionaryValue> notification_value(
253 SerializeNotification(*notification)); 258 SerializeNotification(*notification));
254 web_ui_->CallJavascriptFunction("appNotificationChanged", 259 web_ui_->CallJavascriptFunction("appNotificationChanged",
255 id_value, *notification_value.get()); 260 id_value, *notification_value.get());
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 467
463 // First time we get here we set up the observer so that we can tell update 468 // First time we get here we set up the observer so that we can tell update
464 // the apps as they change. 469 // the apps as they change.
465 if (!has_loaded_apps_) { 470 if (!has_loaded_apps_) {
466 pref_change_registrar_.Init( 471 pref_change_registrar_.Init(
467 extension_service_->extension_prefs()->pref_service()); 472 extension_service_->extension_prefs()->pref_service());
468 pref_change_registrar_.Add(ExtensionPrefs::kExtensionsPref, this); 473 pref_change_registrar_.Add(ExtensionPrefs::kExtensionsPref, this);
469 pref_change_registrar_.Add(prefs::kNTPAppPageNames, this); 474 pref_change_registrar_.Add(prefs::kNTPAppPageNames, this);
470 475
471 registrar_.Add(this, chrome::NOTIFICATION_APP_NOTIFICATION_STATE_CHANGED, 476 registrar_.Add(this, chrome::NOTIFICATION_APP_NOTIFICATION_STATE_CHANGED,
472 content::NotificationService::AllSources()); 477 content::Source<Profile>(profile));
473 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, 478 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
474 content::Source<Profile>(profile)); 479 content::Source<Profile>(profile));
475 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, 480 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
476 content::Source<Profile>(profile)); 481 content::Source<Profile>(profile));
477 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED, 482 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED,
478 content::Source<ExtensionPrefs>(extension_service_->extension_prefs())); 483 content::Source<ExtensionPrefs>(extension_service_->extension_prefs()));
479 registrar_.Add(this, chrome::NOTIFICATION_WEB_STORE_PROMO_LOADED, 484 registrar_.Add(this, chrome::NOTIFICATION_WEB_STORE_PROMO_LOADED,
480 content::Source<Profile>(profile)); 485 content::Source<Profile>(profile));
481 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR, 486 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR,
482 content::Source<CrxInstaller>(NULL)); 487 content::Source<CrxInstaller>(NULL));
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 const Extension* extension = extension_service_->GetExtensionById( 758 const Extension* extension = extension_service_->GetExtensionById(
754 extension_id, true); 759 extension_id, true);
755 if (!extension) 760 if (!extension)
756 return; 761 return;
757 762
758 AppNotificationManager* notification_manager = 763 AppNotificationManager* notification_manager =
759 extension_service_->app_notification_manager(); 764 extension_service_->app_notification_manager();
760 notification_manager->ClearAll(extension_id); 765 notification_manager->ClearAll(extension_id);
761 } 766 }
762 767
768 void AppLauncherHandler::HandleSetNotificationsDisabled(
769 const ListValue* args) {
770 std::string extension_id;
771 bool disabled = false;
772 CHECK(args->GetString(0, &extension_id));
773 CHECK(args->GetBoolean(1, &disabled));
774
775 const Extension* extension = extension_service_->GetExtensionById(
776 extension_id, true);
777 if (!extension)
778 return;
779 extension_service_->SetAppNotificationDisabled(extension_id, disabled);
780 }
781
763 void AppLauncherHandler::OnFaviconForApp(FaviconService::Handle handle, 782 void AppLauncherHandler::OnFaviconForApp(FaviconService::Handle handle,
764 history::FaviconData data) { 783 history::FaviconData data) {
765 scoped_ptr<AppInstallInfo> install_info( 784 scoped_ptr<AppInstallInfo> install_info(
766 favicon_consumer_.GetClientDataForCurrentRequest()); 785 favicon_consumer_.GetClientDataForCurrentRequest());
767 scoped_ptr<WebApplicationInfo> web_app(new WebApplicationInfo()); 786 scoped_ptr<WebApplicationInfo> web_app(new WebApplicationInfo());
768 web_app->is_bookmark_app = install_info->is_bookmark_app; 787 web_app->is_bookmark_app = install_info->is_bookmark_app;
769 web_app->title = install_info->title; 788 web_app->title = install_info->title;
770 web_app->app_url = install_info->app_url; 789 web_app->app_url = install_info->app_url;
771 web_app->urls.push_back(install_info->app_url); 790 web_app->urls.push_back(install_info->app_url);
772 791
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 972
954 void AppLauncherHandler::UninstallDefaultApps() { 973 void AppLauncherHandler::UninstallDefaultApps() {
955 AppsPromo* apps_promo = extension_service_->apps_promo(); 974 AppsPromo* apps_promo = extension_service_->apps_promo();
956 const ExtensionIdSet& app_ids = apps_promo->old_default_apps(); 975 const ExtensionIdSet& app_ids = apps_promo->old_default_apps();
957 for (ExtensionIdSet::const_iterator iter = app_ids.begin(); 976 for (ExtensionIdSet::const_iterator iter = app_ids.begin();
958 iter != app_ids.end(); ++iter) { 977 iter != app_ids.end(); ++iter) {
959 if (extension_service_->GetExtensionById(*iter, true)) 978 if (extension_service_->GetExtensionById(*iter, true))
960 extension_service_->UninstallExtension(*iter, false, NULL); 979 extension_service_->UninstallExtension(*iter, false, NULL);
961 } 980 }
962 } 981 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698