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

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: fix merge conflicts 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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 ExtensionPrefs* prefs = service->extension_prefs(); 142 ExtensionPrefs* prefs = service->extension_prefs();
143 value->SetInteger("launch_type", 143 value->SetInteger("launch_type",
144 prefs->GetLaunchType(extension->id(), 144 prefs->GetLaunchType(extension->id(),
145 ExtensionPrefs::LAUNCH_DEFAULT)); 145 ExtensionPrefs::LAUNCH_DEFAULT));
146 value->SetBoolean("offline_enabled", extension->offline_enabled()); 146 value->SetBoolean("offline_enabled", extension->offline_enabled());
147 value->SetBoolean("is_component", 147 value->SetBoolean("is_component",
148 extension->location() == Extension::COMPONENT); 148 extension->location() == Extension::COMPONENT);
149 value->SetBoolean("is_webstore", 149 value->SetBoolean("is_webstore",
150 extension->id() == extension_misc::kWebStoreAppId); 150 extension->id() == extension_misc::kWebStoreAppId);
151 151
152 if (extension->HasAPIPermission(ExtensionAPIPermission::kAppNotifications)) {
153 ExtensionPrefs* prefs = service->extension_prefs();
154 value->SetBoolean("notifications_disabled",
155 prefs->IsAppNotificationDisabled(extension->id()));
156 }
157
152 if (notification) 158 if (notification)
153 value->Set("notification", SerializeNotification(*notification)); 159 value->Set("notification", SerializeNotification(*notification));
154 160
155 int app_launch_index = prefs->GetAppLaunchIndex(extension->id()); 161 int app_launch_index = prefs->GetAppLaunchIndex(extension->id());
156 if (app_launch_index == -1) { 162 if (app_launch_index == -1) {
157 // Make sure every app has a launch index (some predate the launch index). 163 // Make sure every app has a launch index (some predate the launch index).
158 // The webstore's app launch index is set to -2 to make sure it's first. 164 // The webstore's app launch index is set to -2 to make sure it's first.
159 // The next time the user drags (any) app this will be set to something 165 // The next time the user drags (any) app this will be set to something
160 // sane (i.e. >= 0). 166 // sane (i.e. >= 0).
161 app_launch_index = extension->id() == extension_misc::kWebStoreAppId ? 167 app_launch_index = extension->id() == extension_misc::kWebStoreAppId ?
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 base::Unretained(this))); 220 base::Unretained(this)));
215 web_ui_->RegisterMessageCallback("generateAppForLink", 221 web_ui_->RegisterMessageCallback("generateAppForLink",
216 base::Bind(&AppLauncherHandler::HandleGenerateAppForLink, 222 base::Bind(&AppLauncherHandler::HandleGenerateAppForLink,
217 base::Unretained(this))); 223 base::Unretained(this)));
218 web_ui_->RegisterMessageCallback("recordAppLaunchByURL", 224 web_ui_->RegisterMessageCallback("recordAppLaunchByURL",
219 base::Bind(&AppLauncherHandler::HandleRecordAppLaunchByURL, 225 base::Bind(&AppLauncherHandler::HandleRecordAppLaunchByURL,
220 base::Unretained(this))); 226 base::Unretained(this)));
221 web_ui_->RegisterMessageCallback("closeNotification", 227 web_ui_->RegisterMessageCallback("closeNotification",
222 base::Bind(&AppLauncherHandler::HandleNotificationClose, 228 base::Bind(&AppLauncherHandler::HandleNotificationClose,
223 base::Unretained(this))); 229 base::Unretained(this)));
230 web_ui_->RegisterMessageCallback("setNotificationsDisabled",
231 base::Bind(&AppLauncherHandler::HandleSetNotificationsDisabled,
232 base::Unretained(this)));
224 } 233 }
225 234
226 void AppLauncherHandler::Observe(int type, 235 void AppLauncherHandler::Observe(int type,
227 const content::NotificationSource& source, 236 const content::NotificationSource& source,
228 const content::NotificationDetails& details) { 237 const content::NotificationDetails& details) {
229 if (type == chrome::NOTIFICATION_APP_INSTALLED_TO_NTP) { 238 if (type == chrome::NOTIFICATION_APP_INSTALLED_TO_NTP) {
230 highlight_app_id_ = *content::Details<const std::string>(details).ptr(); 239 highlight_app_id_ = *content::Details<const std::string>(details).ptr();
231 if (has_loaded_apps_) 240 if (has_loaded_apps_)
232 SetAppToBeHighlighted(); 241 SetAppToBeHighlighted();
233 return; 242 return;
234 } 243 }
235 244
236 if (ignore_changes_ || !has_loaded_apps_) 245 if (ignore_changes_ || !has_loaded_apps_)
237 return; 246 return;
238 247
239 switch (type) { 248 switch (type) {
240 case chrome::NOTIFICATION_APP_NOTIFICATION_STATE_CHANGED: { 249 case chrome::NOTIFICATION_APP_NOTIFICATION_STATE_CHANGED: {
241 Profile* profile = content::Source<Profile>(source).ptr();
242 if (!Profile::FromWebUI(web_ui_)->IsSameProfile(profile))
243 return;
244
245 const std::string& id = 250 const std::string& id =
246 *content::Details<const std::string>(details).ptr(); 251 *content::Details<const std::string>(details).ptr();
247 const AppNotification* notification = 252 const AppNotification* notification =
248 extension_service_->app_notification_manager()->GetLast(id); 253 extension_service_->app_notification_manager()->GetLast(id);
249 base::StringValue id_value(id); 254 base::StringValue id_value(id);
250 if (notification) { 255 if (notification) {
251 scoped_ptr<DictionaryValue> notification_value( 256 scoped_ptr<DictionaryValue> notification_value(
252 SerializeNotification(*notification)); 257 SerializeNotification(*notification));
253 web_ui_->CallJavascriptFunction("appNotificationChanged", 258 web_ui_->CallJavascriptFunction("appNotificationChanged",
254 id_value, *notification_value.get()); 259 id_value, *notification_value.get());
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 466
462 // First time we get here we set up the observer so that we can tell update 467 // First time we get here we set up the observer so that we can tell update
463 // the apps as they change. 468 // the apps as they change.
464 if (!has_loaded_apps_) { 469 if (!has_loaded_apps_) {
465 pref_change_registrar_.Init( 470 pref_change_registrar_.Init(
466 extension_service_->extension_prefs()->pref_service()); 471 extension_service_->extension_prefs()->pref_service());
467 pref_change_registrar_.Add(ExtensionPrefs::kExtensionsPref, this); 472 pref_change_registrar_.Add(ExtensionPrefs::kExtensionsPref, this);
468 pref_change_registrar_.Add(prefs::kNTPAppPageNames, this); 473 pref_change_registrar_.Add(prefs::kNTPAppPageNames, this);
469 474
470 registrar_.Add(this, chrome::NOTIFICATION_APP_NOTIFICATION_STATE_CHANGED, 475 registrar_.Add(this, chrome::NOTIFICATION_APP_NOTIFICATION_STATE_CHANGED,
471 content::NotificationService::AllSources()); 476 content::Source<Profile>(profile));
472 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, 477 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
473 content::Source<Profile>(profile)); 478 content::Source<Profile>(profile));
474 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, 479 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
475 content::Source<Profile>(profile)); 480 content::Source<Profile>(profile));
476 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED, 481 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED,
477 content::Source<ExtensionPrefs>(extension_service_->extension_prefs())); 482 content::Source<ExtensionPrefs>(extension_service_->extension_prefs()));
478 registrar_.Add(this, chrome::NOTIFICATION_WEB_STORE_PROMO_LOADED, 483 registrar_.Add(this, chrome::NOTIFICATION_WEB_STORE_PROMO_LOADED,
479 content::Source<Profile>(profile)); 484 content::Source<Profile>(profile));
480 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR, 485 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR,
481 content::Source<CrxInstaller>(NULL)); 486 content::Source<CrxInstaller>(NULL));
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 const Extension* extension = extension_service_->GetExtensionById( 739 const Extension* extension = extension_service_->GetExtensionById(
735 extension_id, true); 740 extension_id, true);
736 if (!extension) 741 if (!extension)
737 return; 742 return;
738 743
739 AppNotificationManager* notification_manager = 744 AppNotificationManager* notification_manager =
740 extension_service_->app_notification_manager(); 745 extension_service_->app_notification_manager();
741 notification_manager->ClearAll(extension_id); 746 notification_manager->ClearAll(extension_id);
742 } 747 }
743 748
749 void AppLauncherHandler::HandleSetNotificationsDisabled(
750 const ListValue* args) {
751 std::string extension_id;
752 bool disabled = false;
753 CHECK(args->GetString(0, &extension_id));
754 CHECK(args->GetBoolean(1, &disabled));
755
756 const Extension* extension = extension_service_->GetExtensionById(
757 extension_id, true);
758 if (!extension)
759 return;
760 extension_service_->SetAppNotificationDisabled(extension_id, disabled);
761 }
762
744 void AppLauncherHandler::OnFaviconForApp(FaviconService::Handle handle, 763 void AppLauncherHandler::OnFaviconForApp(FaviconService::Handle handle,
745 history::FaviconData data) { 764 history::FaviconData data) {
746 scoped_ptr<AppInstallInfo> install_info( 765 scoped_ptr<AppInstallInfo> install_info(
747 favicon_consumer_.GetClientDataForCurrentRequest()); 766 favicon_consumer_.GetClientDataForCurrentRequest());
748 scoped_ptr<WebApplicationInfo> web_app(new WebApplicationInfo()); 767 scoped_ptr<WebApplicationInfo> web_app(new WebApplicationInfo());
749 web_app->is_bookmark_app = install_info->is_bookmark_app; 768 web_app->is_bookmark_app = install_info->is_bookmark_app;
750 web_app->title = install_info->title; 769 web_app->title = install_info->title;
751 web_app->app_url = install_info->app_url; 770 web_app->app_url = install_info->app_url;
752 web_app->urls.push_back(install_info->app_url); 771 web_app->urls.push_back(install_info->app_url);
753 772
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 953
935 void AppLauncherHandler::UninstallDefaultApps() { 954 void AppLauncherHandler::UninstallDefaultApps() {
936 AppsPromo* apps_promo = extension_service_->apps_promo(); 955 AppsPromo* apps_promo = extension_service_->apps_promo();
937 const ExtensionIdSet& app_ids = apps_promo->old_default_apps(); 956 const ExtensionIdSet& app_ids = apps_promo->old_default_apps();
938 for (ExtensionIdSet::const_iterator iter = app_ids.begin(); 957 for (ExtensionIdSet::const_iterator iter = app_ids.begin();
939 iter != app_ids.end(); ++iter) { 958 iter != app_ids.end(); ++iter) {
940 if (extension_service_->GetExtensionById(*iter, true)) 959 if (extension_service_->GetExtensionById(*iter, true))
941 extension_service_->UninstallExtension(*iter, false, NULL); 960 extension_service_->UninstallExtension(*iter, false, NULL);
942 } 961 }
943 } 962 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/ntp/app_launcher_handler.h ('k') | chrome/browser/ui/webui/ntp/ntp_resource_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698