Index: chrome/browser/dom_ui/app_launcher_handler.cc |
diff --git a/chrome/browser/dom_ui/app_launcher_handler.cc b/chrome/browser/dom_ui/app_launcher_handler.cc |
index d85c2c579f8c0dfa4ab227d82460bb5d38e87e6a..9c867d1b214c7d9016f07992c3d73e8dcb16ed46 100644 |
--- a/chrome/browser/dom_ui/app_launcher_handler.cc |
+++ b/chrome/browser/dom_ui/app_launcher_handler.cc |
@@ -12,6 +12,7 @@ |
#include "chrome/browser/app_launched_animation.h" |
#include "chrome/browser/browser.h" |
#include "chrome/browser/browser_list.h" |
+#include "chrome/browser/extensions/extension_prefs.h" |
#include "chrome/browser/extensions/extensions_service.h" |
#include "chrome/browser/platform_util.h" |
#include "chrome/browser/tab_contents/tab_contents.h" |
@@ -68,6 +69,8 @@ void AppLauncherHandler::RegisterMessages() { |
NewCallback(this, &AppLauncherHandler::HandleGetApps)); |
dom_ui_->RegisterMessageCallback("launchApp", |
NewCallback(this, &AppLauncherHandler::HandleLaunchApp)); |
+ dom_ui_->RegisterMessageCallback("setLaunchType", |
+ NewCallback(this, &AppLauncherHandler::HandleSetLaunchType)); |
dom_ui_->RegisterMessageCallback("uninstallApp", |
NewCallback(this, &AppLauncherHandler::HandleUninstallApp)); |
} |
@@ -81,7 +84,15 @@ void AppLauncherHandler::Observe(NotificationType type, |
if (dom_ui_->tab_contents()) |
HandleGetApps(NULL); |
break; |
+ case NotificationType::PREF_CHANGED: { |
+ if (!dom_ui_->tab_contents()) |
+ break; |
+ DictionaryValue dictionary; |
+ FillAppDictionary(&dictionary); |
+ dom_ui_->CallJavascriptFunction(L"appsPrefChangeCallback", dictionary); |
+ break; |
+ } |
default: |
NOTREACHED(); |
} |
@@ -89,6 +100,7 @@ void AppLauncherHandler::Observe(NotificationType type, |
// static |
void AppLauncherHandler::CreateAppInfo(Extension* extension, |
+ ExtensionPrefs* extension_prefs, |
DictionaryValue* value) { |
value->Clear(); |
value->SetString("id", extension->id()); |
@@ -96,22 +108,18 @@ void AppLauncherHandler::CreateAppInfo(Extension* extension, |
value->SetString("description", extension->description()); |
value->SetString("launch_url", extension->GetFullLaunchURL().spec()); |
value->SetString("options_url", extension->options_url().spec()); |
- |
value->SetString("icon_big", GetIconURL( |
extension, Extension::EXTENSION_ICON_LARGE, |
"chrome://theme/IDR_APP_DEFAULT_ICON")); |
value->SetString("icon_small", GetIconURL( |
extension, Extension::EXTENSION_ICON_BITTY, |
std::string("chrome://favicon/") + extension->GetFullLaunchURL().spec())); |
+ value->SetInteger("launch_container", extension->launch_container()); |
+ value->SetInteger("launch_type", |
+ extension_prefs->GetLaunchType(extension->id())); |
} |
-void AppLauncherHandler::HandleGetApps(const ListValue* args) { |
- bool show_debug_link = CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kAppsDebug); |
- |
- DictionaryValue dictionary; |
- dictionary.SetBoolean("showDebugLink", show_debug_link); |
- |
+void AppLauncherHandler::FillAppDictionary(DictionaryValue* dictionary) { |
ListValue* list = new ListValue(); |
const ExtensionList* extensions = extensions_service_->extensions(); |
for (ExtensionList::const_iterator it = extensions->begin(); |
@@ -120,12 +128,16 @@ void AppLauncherHandler::HandleGetApps(const ListValue* args) { |
// gets special treatment in ntp/apps.js. |
if ((*it)->is_app() && (*it)->id() != extension_misc::kWebStoreAppId) { |
DictionaryValue* app_info = new DictionaryValue(); |
- CreateAppInfo(*it, app_info); |
+ CreateAppInfo(*it, extensions_service_->extension_prefs(), app_info); |
list->Append(app_info); |
} |
} |
+ dictionary->Set("apps", list); |
+} |
- dictionary.Set("apps", list); |
+void AppLauncherHandler::HandleGetApps(const ListValue* args) { |
+ DictionaryValue dictionary; |
+ FillAppDictionary(&dictionary); |
dom_ui_->CallJavascriptFunction(L"getAppsCallback", dictionary); |
// First time we get here we set up the observer so that we can tell update |
@@ -136,6 +148,11 @@ void AppLauncherHandler::HandleGetApps(const ListValue* args) { |
registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, |
NotificationService::AllSources()); |
} |
+ if (pref_change_registrar_.IsEmpty()) { |
+ pref_change_registrar_.Init( |
+ extensions_service_->extension_prefs()->pref_service()); |
+ pref_change_registrar_.Add(ExtensionPrefs::kExtensionsPref, this); |
+ } |
} |
void AppLauncherHandler::HandleLaunchApp(const ListValue* args) { |
@@ -165,7 +182,6 @@ void AppLauncherHandler::HandleLaunchApp(const ListValue* args) { |
extensions_service_->GetExtensionById(extension_id, false); |
DCHECK(extension); |
Profile* profile = extensions_service_->profile(); |
- extension_misc::LaunchContainer container = extension->launch_container(); |
// To give a more "launchy" experience when using the NTP launcher, we close |
// it automatically. |
@@ -175,7 +191,7 @@ void AppLauncherHandler::HandleLaunchApp(const ListValue* args) { |
old_contents = browser->GetSelectedTabContents(); |
AnimateAppIcon(extension, rect); |
- Browser::OpenApplication(profile, extension, container); |
+ Browser::OpenApplication(profile, extension, extension->launch_container()); |
if (old_contents && |
old_contents->GetURL().GetOrigin() == |
@@ -184,6 +200,24 @@ void AppLauncherHandler::HandleLaunchApp(const ListValue* args) { |
} |
} |
+void AppLauncherHandler::HandleSetLaunchType(const ListValue* args) { |
+ std::string extension_id; |
+ int launch_type; |
+ if (!args->GetString(0, &extension_id) || |
+ !ExtractInt(args, 1, &launch_type)) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ Extension* extension = |
+ extensions_service_->GetExtensionById(extension_id, false); |
+ DCHECK(extension); |
+ |
+ extensions_service_->extension_prefs()->SetLaunchType( |
+ extension_id, |
+ static_cast<ExtensionPrefs::LaunchType>(launch_type)); |
+} |
+ |
void AppLauncherHandler::AnimateAppIcon(Extension* extension, |
const gfx::Rect& rect) { |
// We make this check for the case of minimized windows, unit tests, etc. |