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

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

Issue 7610014: [ntp4] Bookmarks page implementation, first-pass. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Final review tweaks, rebase. 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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 } 92 }
93 return dictionary; 93 return dictionary;
94 } 94 }
95 95
96 // static 96 // static
97 bool AppLauncherHandler::IsAppExcludedFromList(const Extension* extension) { 97 bool AppLauncherHandler::IsAppExcludedFromList(const Extension* extension) {
98 // Don't include the WebStore and the Cloud Print app. 98 // Don't include the WebStore and the Cloud Print app.
99 // The WebStore launcher gets special treatment in ntp/apps.js. 99 // The WebStore launcher gets special treatment in ntp/apps.js.
100 // The Cloud Print app should never be displayed in the NTP. 100 // The Cloud Print app should never be displayed in the NTP.
101 bool ntp3 = 101 bool ntp3 =
102 !NewTabUI::Ntp4Enabled(); 102 !NewTabUI::NTP4Enabled();
103 if (!extension->is_app() || 103 if (!extension->is_app() ||
104 (ntp3 && extension->id() == extension_misc::kWebStoreAppId) || 104 (ntp3 && extension->id() == extension_misc::kWebStoreAppId) ||
105 (extension->id() == extension_misc::kCloudPrintAppId)) { 105 (extension->id() == extension_misc::kCloudPrintAppId)) {
106 return true; 106 return true;
107 } 107 }
108 return false; 108 return false;
109 } 109 }
110 110
111 void AppLauncherHandler::CreateAppInfo(const Extension* extension, 111 void AppLauncherHandler::CreateAppInfo(const Extension* extension,
112 const AppNotification* notification, 112 const AppNotification* notification,
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 } 262 }
263 case chrome::NOTIFICATION_EXTENSION_LOADED: 263 case chrome::NOTIFICATION_EXTENSION_LOADED:
264 case chrome::NOTIFICATION_EXTENSION_UNLOADED: { 264 case chrome::NOTIFICATION_EXTENSION_UNLOADED: {
265 const Extension* extension = 265 const Extension* extension =
266 type == chrome::NOTIFICATION_EXTENSION_LOADED ? 266 type == chrome::NOTIFICATION_EXTENSION_LOADED ?
267 Details<const Extension>(details).ptr() : 267 Details<const Extension>(details).ptr() :
268 Details<UnloadedExtensionInfo>(details)->extension; 268 Details<UnloadedExtensionInfo>(details)->extension;
269 if (!extension->is_app()) 269 if (!extension->is_app())
270 break; 270 break;
271 271
272 if (NewTabUI::Ntp4Enabled()) { 272 if (NewTabUI::NTP4Enabled()) {
273 scoped_ptr<DictionaryValue> app_info(GetAppInfo(extension)); 273 scoped_ptr<DictionaryValue> app_info(GetAppInfo(extension));
274 if (app_info.get()) { 274 if (app_info.get()) {
275 std::string function = 275 std::string function =
276 type == chrome::NOTIFICATION_EXTENSION_LOADED ? 276 type == chrome::NOTIFICATION_EXTENSION_LOADED ?
277 "ntp4.appAdded" : "ntp4.appRemoved"; 277 "ntp4.appAdded" : "ntp4.appRemoved";
278 web_ui_->CallJavascriptFunction(function, *app_info); 278 web_ui_->CallJavascriptFunction(function, *app_info);
279 } 279 }
280 } else if (web_ui_->tab_contents()) { 280 } else if (web_ui_->tab_contents()) {
281 HandleGetApps(NULL); 281 HandleGetApps(NULL);
282 } 282 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 // Making shortcut does not make sense on ChromeOS because it does not have 360 // Making shortcut does not make sense on ChromeOS because it does not have
361 // a desktop. 361 // a desktop.
362 dictionary->SetBoolean("disableCreateAppShortcut", true); 362 dictionary->SetBoolean("disableCreateAppShortcut", true);
363 #endif 363 #endif
364 364
365 dictionary->SetBoolean( 365 dictionary->SetBoolean(
366 "showLauncher", 366 "showLauncher",
367 extension_service_->apps_promo()->ShouldShowAppLauncher( 367 extension_service_->apps_promo()->ShouldShowAppLauncher(
368 extension_service_->GetAppIds())); 368 extension_service_->GetAppIds()));
369 369
370 if (NewTabUI::Ntp4Enabled()) { 370 if (NewTabUI::NTP4Enabled()) {
371 PrefService* prefs = Profile::FromWebUI(web_ui_)->GetPrefs(); 371 PrefService* prefs = Profile::FromWebUI(web_ui_)->GetPrefs();
372 const ListValue* app_page_names = prefs->GetList(prefs::kNTPAppPageNames); 372 const ListValue* app_page_names = prefs->GetList(prefs::kNTPAppPageNames);
373 if (app_page_names && app_page_names->GetSize()) { 373 if (app_page_names && app_page_names->GetSize()) {
374 dictionary->Set("appPageNames", 374 dictionary->Set("appPageNames",
375 static_cast<ListValue*>(app_page_names->DeepCopy())); 375 static_cast<ListValue*>(app_page_names->DeepCopy()));
376 } 376 }
377 } 377 }
378 } 378 }
379 379
380 DictionaryValue* AppLauncherHandler::GetAppInfo(const Extension* extension) { 380 DictionaryValue* AppLauncherHandler::GetAppInfo(const Extension* extension) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 // If the user pressed special keys when clicking, override the saved 494 // If the user pressed special keys when clicking, override the saved
495 // preference for launch container. 495 // preference for launch container.
496 bool middle_button = (button == 1.0); 496 bool middle_button = (button == 1.0);
497 WindowOpenDisposition disposition = 497 WindowOpenDisposition disposition =
498 disposition_utils::DispositionFromClick(middle_button, alt_key, 498 disposition_utils::DispositionFromClick(middle_button, alt_key,
499 ctrl_key, meta_key, shift_key); 499 ctrl_key, meta_key, shift_key);
500 500
501 if (extension_id != extension_misc::kWebStoreAppId) { 501 if (extension_id != extension_misc::kWebStoreAppId) {
502 RecordAppLaunchByID(promo_active_, launch_bucket); 502 RecordAppLaunchByID(promo_active_, launch_bucket);
503 extension_service_->apps_promo()->ExpireDefaultApps(); 503 extension_service_->apps_promo()->ExpireDefaultApps();
504 } else if (NewTabUI::Ntp4Enabled()) { 504 } else if (NewTabUI::NTP4Enabled()) {
505 RecordWebStoreLaunch(promo_active_); 505 RecordWebStoreLaunch(promo_active_);
506 } 506 }
507 507
508 if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB) { 508 if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB) {
509 // TODO(jamescook): Proper support for background tabs. 509 // TODO(jamescook): Proper support for background tabs.
510 Browser::OpenApplication( 510 Browser::OpenApplication(
511 profile, extension, extension_misc::LAUNCH_TAB, disposition); 511 profile, extension, extension_misc::LAUNCH_TAB, disposition);
512 } else if (disposition == NEW_WINDOW) { 512 } else if (disposition == NEW_WINDOW) {
513 // Force a new window open. 513 // Force a new window open.
514 Browser::OpenApplication( 514 Browser::OpenApplication(
(...skipping 27 matching lines...) Expand all
542 double launch_type; 542 double launch_type;
543 CHECK(args->GetString(0, &extension_id)); 543 CHECK(args->GetString(0, &extension_id));
544 CHECK(args->GetDouble(1, &launch_type)); 544 CHECK(args->GetDouble(1, &launch_type));
545 545
546 const Extension* extension = 546 const Extension* extension =
547 extension_service_->GetExtensionById(extension_id, true); 547 extension_service_->GetExtensionById(extension_id, true);
548 CHECK(extension); 548 CHECK(extension);
549 549
550 // Don't update the page; it already knows about the launch type change. 550 // Don't update the page; it already knows about the launch type change.
551 scoped_ptr<AutoReset<bool> > auto_reset; 551 scoped_ptr<AutoReset<bool> > auto_reset;
552 if (NewTabUI::Ntp4Enabled()) 552 if (NewTabUI::NTP4Enabled())
553 auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true)); 553 auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true));
554 554
555 extension_service_->extension_prefs()->SetLaunchType( 555 extension_service_->extension_prefs()->SetLaunchType(
556 extension_id, 556 extension_id,
557 static_cast<ExtensionPrefs::LaunchType>( 557 static_cast<ExtensionPrefs::LaunchType>(
558 static_cast<int>(launch_type))); 558 static_cast<int>(launch_type)));
559 } 559 }
560 560
561 void AppLauncherHandler::HandleUninstallApp(const ListValue* args) { 561 void AppLauncherHandler::HandleUninstallApp(const ListValue* args) {
562 std::string extension_id; 562 std::string extension_id;
(...skipping 10 matching lines...) Expand all
573 return; 573 return;
574 } 574 }
575 if (!extension_id_prompting_.empty()) 575 if (!extension_id_prompting_.empty())
576 return; // Only one prompt at a time. 576 return; // Only one prompt at a time.
577 577
578 extension_id_prompting_ = extension_id; 578 extension_id_prompting_ = extension_id;
579 579
580 bool dont_confirm = false; 580 bool dont_confirm = false;
581 if (args->GetBoolean(1, &dont_confirm) && dont_confirm) { 581 if (args->GetBoolean(1, &dont_confirm) && dont_confirm) {
582 scoped_ptr<AutoReset<bool> > auto_reset; 582 scoped_ptr<AutoReset<bool> > auto_reset;
583 if (NewTabUI::Ntp4Enabled()) 583 if (NewTabUI::NTP4Enabled())
584 auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true)); 584 auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true));
585 ExtensionDialogAccepted(); 585 ExtensionDialogAccepted();
586 } else { 586 } else {
587 GetExtensionUninstallDialog()->ConfirmUninstall(this, extension); 587 GetExtensionUninstallDialog()->ConfirmUninstall(this, extension);
588 } 588 }
589 } 589 }
590 590
591 void AppLauncherHandler::HandleHideAppsPromo(const ListValue* args) { 591 void AppLauncherHandler::HandleHideAppsPromo(const ListValue* args) {
592 // If the user has intentionally hidden the promotion, we'll uninstall all the 592 // If the user has intentionally hidden the promotion, we'll uninstall all the
593 // default apps (we know the user hasn't installed any apps on their own at 593 // default apps (we know the user hasn't installed any apps on their own at
594 // this point, or the promotion wouldn't have been shown). 594 // this point, or the promotion wouldn't have been shown).
595 if (NewTabUI::Ntp4Enabled()) { 595 if (NewTabUI::NTP4Enabled()) {
596 UninstallDefaultApps(); 596 UninstallDefaultApps();
597 extension_service_->apps_promo()->HidePromo(); 597 extension_service_->apps_promo()->HidePromo();
598 } else { 598 } else {
599 // TODO(estade): remove all this. NTP3 uninstalled all the default apps then 599 // TODO(estade): remove all this. NTP3 uninstalled all the default apps then
600 // refreshed the entire NTP, we don't have to jump through these hoops for 600 // refreshed the entire NTP, we don't have to jump through these hoops for
601 // NTP4 because each app uninstall is handled separately without reloading 601 // NTP4 because each app uninstall is handled separately without reloading
602 // the entire page. 602 // the entire page.
603 ignore_changes_ = true; 603 ignore_changes_ = true;
604 UninstallDefaultApps(); 604 UninstallDefaultApps();
605 extension_service_->apps_promo()->HidePromo(); 605 extension_service_->apps_promo()->HidePromo();
(...skipping 30 matching lines...) Expand all
636 636
637 std::vector<std::string> extension_ids; 637 std::vector<std::string> extension_ids;
638 for (size_t i = 0; i < app_order->GetSize(); ++i) { 638 for (size_t i = 0; i < app_order->GetSize(); ++i) {
639 std::string value; 639 std::string value;
640 if (app_order->GetString(i, &value)) 640 if (app_order->GetString(i, &value))
641 extension_ids.push_back(value); 641 extension_ids.push_back(value);
642 } 642 }
643 643
644 // Don't update the page; it already knows the apps have been reordered. 644 // Don't update the page; it already knows the apps have been reordered.
645 scoped_ptr<AutoReset<bool> > auto_reset; 645 scoped_ptr<AutoReset<bool> > auto_reset;
646 if (NewTabUI::Ntp4Enabled()) 646 if (NewTabUI::NTP4Enabled())
647 auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true)); 647 auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true));
648 648
649 extension_service_->extension_prefs()->SetAppDraggedByUser(dragged_app_id); 649 extension_service_->extension_prefs()->SetAppDraggedByUser(dragged_app_id);
650 extension_service_->extension_prefs()->SetAppLauncherOrder(extension_ids); 650 extension_service_->extension_prefs()->SetAppLauncherOrder(extension_ids);
651 } 651 }
652 652
653 void AppLauncherHandler::HandleSetPageIndex(const ListValue* args) { 653 void AppLauncherHandler::HandleSetPageIndex(const ListValue* args) {
654 std::string extension_id; 654 std::string extension_id;
655 double page_index; 655 double page_index;
656 CHECK(args->GetString(0, &extension_id)); 656 CHECK(args->GetString(0, &extension_id));
657 CHECK(args->GetDouble(1, &page_index)); 657 CHECK(args->GetDouble(1, &page_index));
658 658
659 // Don't update the page; it already knows the apps have been reordered. 659 // Don't update the page; it already knows the apps have been reordered.
660 scoped_ptr<AutoReset<bool> > auto_reset; 660 scoped_ptr<AutoReset<bool> > auto_reset;
661 if (NewTabUI::Ntp4Enabled()) 661 if (NewTabUI::NTP4Enabled())
662 auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true)); 662 auto_reset.reset(new AutoReset<bool>(&ignore_changes_, true));
663 663
664 extension_service_->extension_prefs()->SetPageIndex(extension_id, 664 extension_service_->extension_prefs()->SetPageIndex(extension_id,
665 static_cast<int>(page_index)); 665 static_cast<int>(page_index));
666 } 666 }
667 667
668 void AppLauncherHandler::HandlePromoSeen(const ListValue* args) { 668 void AppLauncherHandler::HandlePromoSeen(const ListValue* args) {
669 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppsPromoHistogram, 669 UMA_HISTOGRAM_ENUMERATION(extension_misc::kAppsPromoHistogram,
670 extension_misc::PROMO_SEEN, 670 extension_misc::PROMO_SEEN,
671 extension_misc::PROMO_BUCKET_BOUNDARY); 671 extension_misc::PROMO_BUCKET_BOUNDARY);
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 909
910 void AppLauncherHandler::UninstallDefaultApps() { 910 void AppLauncherHandler::UninstallDefaultApps() {
911 AppsPromo* apps_promo = extension_service_->apps_promo(); 911 AppsPromo* apps_promo = extension_service_->apps_promo();
912 const ExtensionIdSet& app_ids = apps_promo->old_default_apps(); 912 const ExtensionIdSet& app_ids = apps_promo->old_default_apps();
913 for (ExtensionIdSet::const_iterator iter = app_ids.begin(); 913 for (ExtensionIdSet::const_iterator iter = app_ids.begin();
914 iter != app_ids.end(); ++iter) { 914 iter != app_ids.end(); ++iter) {
915 if (extension_service_->GetExtensionById(*iter, true)) 915 if (extension_service_->GetExtensionById(*iter, true))
916 extension_service_->UninstallExtension(*iter, false, NULL); 916 extension_service_->UninstallExtension(*iter, false, NULL);
917 } 917 }
918 } 918 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698