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

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

Issue 7187023: Adding an experimental app notification API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: make linkText required if linkUrl is passed Created 9 years, 6 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
« no previous file with comments | « chrome/browser/ui/webui/ntp/app_launcher_handler.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 AppLauncherHandler::AppLauncherHandler(ExtensionService* extension_service) 68 AppLauncherHandler::AppLauncherHandler(ExtensionService* extension_service)
69 : extensions_service_(extension_service), 69 : extensions_service_(extension_service),
70 promo_active_(false), 70 promo_active_(false),
71 ignore_changes_(false) { 71 ignore_changes_(false) {
72 } 72 }
73 73
74 AppLauncherHandler::~AppLauncherHandler() {} 74 AppLauncherHandler::~AppLauncherHandler() {}
75 75
76 // static 76 // static
77 void AppLauncherHandler::CreateAppInfo(const Extension* extension, 77 void AppLauncherHandler::CreateAppInfo(const Extension* extension,
78 const AppNotificationList* notifications,
78 ExtensionPrefs* prefs, 79 ExtensionPrefs* prefs,
79 DictionaryValue* value) { 80 DictionaryValue* value) {
80 bool enabled = 81 bool enabled =
81 prefs->GetExtensionState(extension->id()) != Extension::DISABLED; 82 prefs->GetExtensionState(extension->id()) != Extension::DISABLED;
82 GURL icon_big = 83 GURL icon_big =
83 ExtensionIconSource::GetIconURL(extension, 84 ExtensionIconSource::GetIconURL(extension,
84 Extension::EXTENSION_ICON_LARGE, 85 Extension::EXTENSION_ICON_LARGE,
85 ExtensionIconSet::MATCH_EXACTLY, 86 ExtensionIconSet::MATCH_EXACTLY,
86 !enabled); 87 !enabled);
87 GURL icon_small = 88 GURL icon_small =
(...skipping 14 matching lines...) Expand all
102 Extension::UserMayDisable(extension->location())); 103 Extension::UserMayDisable(extension->location()));
103 value->SetString("icon_big", icon_big.spec()); 104 value->SetString("icon_big", icon_big.spec());
104 value->SetString("icon_small", icon_small.spec()); 105 value->SetString("icon_small", icon_small.spec());
105 value->SetInteger("launch_container", extension->launch_container()); 106 value->SetInteger("launch_container", extension->launch_container());
106 value->SetInteger("launch_type", 107 value->SetInteger("launch_type",
107 prefs->GetLaunchType(extension->id(), 108 prefs->GetLaunchType(extension->id(),
108 ExtensionPrefs::LAUNCH_DEFAULT)); 109 ExtensionPrefs::LAUNCH_DEFAULT));
109 value->SetBoolean("is_component", 110 value->SetBoolean("is_component",
110 extension->location() == Extension::COMPONENT); 111 extension->location() == Extension::COMPONENT);
111 112
113 if (notifications && !notifications->empty()) {
114 AppNotification* n = (*notifications->rbegin()).get();
Evan Stade 2011/06/22 19:36:23 is this not the same as notifications->rbegin()->g
asargent_no_longer_on_chrome 2011/06/23 22:36:24 Yes, good point. (I reworked the code - this moved
115 value->SetString("title", n->title);
116 value->SetString("body", n->body);
117 if (!n->linkUrl.is_empty()) {
118 value->SetString("linkUrl", n->linkUrl.spec());
119 value->SetString("linkText", n->linkText);
120 }
121 }
122
112 int app_launch_index = prefs->GetAppLaunchIndex(extension->id()); 123 int app_launch_index = prefs->GetAppLaunchIndex(extension->id());
113 if (app_launch_index == -1) { 124 if (app_launch_index == -1) {
114 // Make sure every app has a launch index (some predate the launch index). 125 // Make sure every app has a launch index (some predate the launch index).
115 app_launch_index = prefs->GetNextAppLaunchIndex(); 126 app_launch_index = prefs->GetNextAppLaunchIndex();
116 prefs->SetAppLaunchIndex(extension->id(), app_launch_index); 127 prefs->SetAppLaunchIndex(extension->id(), app_launch_index);
117 } 128 }
118 value->SetInteger("app_launch_index", app_launch_index); 129 value->SetInteger("app_launch_index", app_launch_index);
119 130
120 int page_index = prefs->GetPageIndex(extension->id()); 131 int page_index = prefs->GetPageIndex(extension->id());
121 if (page_index >= 0) { 132 if (page_index >= 0) {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 NewCallback(this, &AppLauncherHandler::HandlePromoSeen)); 202 NewCallback(this, &AppLauncherHandler::HandlePromoSeen));
192 } 203 }
193 204
194 void AppLauncherHandler::Observe(NotificationType type, 205 void AppLauncherHandler::Observe(NotificationType type,
195 const NotificationSource& source, 206 const NotificationSource& source,
196 const NotificationDetails& details) { 207 const NotificationDetails& details) {
197 if (ignore_changes_) 208 if (ignore_changes_)
198 return; 209 return;
199 210
200 switch (type.value) { 211 switch (type.value) {
212 case NotificationType::APP_NOTIFICATION_STATE_CHANGED:
Evan Stade 2011/06/22 19:36:23 I don't think you want to nuke the entirety of the
asargent_no_longer_on_chrome 2011/06/23 22:36:24 Good catch - I had thrown this in there as a quick
201 case NotificationType::EXTENSION_LOADED: 213 case NotificationType::EXTENSION_LOADED:
202 case NotificationType::EXTENSION_UNLOADED: 214 case NotificationType::EXTENSION_UNLOADED:
203 case NotificationType::EXTENSION_LAUNCHER_REORDERED: 215 case NotificationType::EXTENSION_LAUNCHER_REORDERED:
204 // The promo may not load until a couple seconds after the first NTP view, 216 // The promo may not load until a couple seconds after the first NTP view,
205 // so we listen for the load notification and notify the NTP when ready. 217 // so we listen for the load notification and notify the NTP when ready.
206 case NotificationType::WEB_STORE_PROMO_LOADED: 218 case NotificationType::WEB_STORE_PROMO_LOADED:
207 if (web_ui_->tab_contents()) 219 if (web_ui_->tab_contents())
208 HandleGetApps(NULL); 220 HandleGetApps(NULL);
209 break; 221 break;
210 case NotificationType::PREF_CHANGED: { 222 case NotificationType::PREF_CHANGED: {
(...skipping 10 matching lines...) Expand all
221 } 233 }
222 } 234 }
223 235
224 void AppLauncherHandler::FillAppDictionary(DictionaryValue* dictionary) { 236 void AppLauncherHandler::FillAppDictionary(DictionaryValue* dictionary) {
225 ListValue* list = new ListValue(); 237 ListValue* list = new ListValue();
226 const ExtensionList* extensions = extensions_service_->extensions(); 238 const ExtensionList* extensions = extensions_service_->extensions();
227 ExtensionList::const_iterator it; 239 ExtensionList::const_iterator it;
228 for (it = extensions->begin(); it != extensions->end(); ++it) { 240 for (it = extensions->begin(); it != extensions->end(); ++it) {
229 // Don't include the WebStore. 241 // Don't include the WebStore.
230 // The WebStore launcher gets special treatment in ntp/apps.js. 242 // The WebStore launcher gets special treatment in ntp/apps.js.
231 if ((*it)->is_app() && 243 const Extension* extension = *it;
232 (*it)->id() != extension_misc::kWebStoreAppId) { 244 if (extension->is_app() &&
245 extension->id() != extension_misc::kWebStoreAppId) {
233 DictionaryValue* app_info = new DictionaryValue(); 246 DictionaryValue* app_info = new DictionaryValue();
234 CreateAppInfo(*it, extensions_service_->extension_prefs(), app_info); 247 AppNotificationManager* notification_manager =
248 extensions_service_->app_notification_manager();
249 CreateAppInfo(extension,
250 notification_manager->GetAll(extension->id()),
251 extensions_service_->extension_prefs(),
252 app_info);
235 list->Append(app_info); 253 list->Append(app_info);
236 } 254 }
237 } 255 }
238 256
239 extensions = extensions_service_->disabled_extensions(); 257 extensions = extensions_service_->disabled_extensions();
240 for (it = extensions->begin(); it != extensions->end(); ++it) { 258 for (it = extensions->begin(); it != extensions->end(); ++it) {
241 if ((*it)->is_app() && 259 if ((*it)->is_app() &&
242 (*it)->id() != extension_misc::kWebStoreAppId) { 260 (*it)->id() != extension_misc::kWebStoreAppId) {
243 DictionaryValue* app_info = new DictionaryValue(); 261 DictionaryValue* app_info = new DictionaryValue();
244 CreateAppInfo(*it, extensions_service_->extension_prefs(), app_info); 262 CreateAppInfo(*it,
263 NULL,
264 extensions_service_->extension_prefs(),
265 app_info);
245 list->Append(app_info); 266 list->Append(app_info);
246 } 267 }
247 } 268 }
248 269
249 dictionary->Set("apps", list); 270 dictionary->Set("apps", list);
250 271
251 #if defined(OS_MACOSX) 272 #if defined(OS_MACOSX)
252 // App windows are not yet implemented on mac. 273 // App windows are not yet implemented on mac.
253 dictionary->SetBoolean("disableAppWindowLaunch", true); 274 dictionary->SetBoolean("disableAppWindowLaunch", true);
254 dictionary->SetBoolean("disableCreateAppShortcut", true); 275 dictionary->SetBoolean("disableCreateAppShortcut", true);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 ignore_changes_ = false; 328 ignore_changes_ = false;
308 ShownSectionsHandler::SetShownSection(prefs, THUMB); 329 ShownSectionsHandler::SetShownSection(prefs, THUMB);
309 } 330 }
310 331
311 FillAppDictionary(&dictionary); 332 FillAppDictionary(&dictionary);
312 web_ui_->CallJavascriptFunction("getAppsCallback", dictionary); 333 web_ui_->CallJavascriptFunction("getAppsCallback", dictionary);
313 334
314 // First time we get here we set up the observer so that we can tell update 335 // First time we get here we set up the observer so that we can tell update
315 // the apps as they change. 336 // the apps as they change.
316 if (registrar_.IsEmpty()) { 337 if (registrar_.IsEmpty()) {
338 registrar_.Add(this, NotificationType::APP_NOTIFICATION_STATE_CHANGED,
339 NotificationService::AllSources());
317 registrar_.Add(this, NotificationType::EXTENSION_LOADED, 340 registrar_.Add(this, NotificationType::EXTENSION_LOADED,
318 NotificationService::AllSources()); 341 NotificationService::AllSources());
319 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, 342 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
320 NotificationService::AllSources()); 343 NotificationService::AllSources());
321 registrar_.Add(this, NotificationType::EXTENSION_LAUNCHER_REORDERED, 344 registrar_.Add(this, NotificationType::EXTENSION_LAUNCHER_REORDERED,
322 NotificationService::AllSources()); 345 NotificationService::AllSources());
323 registrar_.Add(this, NotificationType::WEB_STORE_PROMO_LOADED, 346 registrar_.Add(this, NotificationType::WEB_STORE_PROMO_LOADED,
324 NotificationService::AllSources()); 347 NotificationService::AllSources());
325 } 348 }
326 if (pref_change_registrar_.IsEmpty()) { 349 if (pref_change_registrar_.IsEmpty()) {
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 675
653 void AppLauncherHandler::UninstallDefaultApps() { 676 void AppLauncherHandler::UninstallDefaultApps() {
654 AppsPromo* apps_promo = extensions_service_->apps_promo(); 677 AppsPromo* apps_promo = extensions_service_->apps_promo();
655 const ExtensionIdSet& app_ids = apps_promo->old_default_apps(); 678 const ExtensionIdSet& app_ids = apps_promo->old_default_apps();
656 for (ExtensionIdSet::const_iterator iter = app_ids.begin(); 679 for (ExtensionIdSet::const_iterator iter = app_ids.begin();
657 iter != app_ids.end(); ++iter) { 680 iter != app_ids.end(); ++iter) {
658 if (extensions_service_->GetExtensionById(*iter, true)) 681 if (extensions_service_->GetExtensionById(*iter, true))
659 extensions_service_->UninstallExtension(*iter, false, NULL); 682 extensions_service_->UninstallExtension(*iter, false, NULL);
660 } 683 }
661 } 684 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/ntp/app_launcher_handler.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698