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

Side by Side Diff: chrome/browser/dom_ui/app_launcher_handler.cc

Issue 3517004: Revert 60997 - o Add user customizable launch type for apps by adding options... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 2 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/dom_ui/app_launcher_handler.h" 5 #include "chrome/browser/dom_ui/app_launcher_handler.h"
6 6
7 #include "app/animation.h" 7 #include "app/animation.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "chrome/browser/app_launched_animation.h" 12 #include "chrome/browser/app_launched_animation.h"
13 #include "chrome/browser/browser.h" 13 #include "chrome/browser/browser.h"
14 #include "chrome/browser/browser_list.h" 14 #include "chrome/browser/browser_list.h"
15 #include "chrome/browser/extensions/extension_prefs.h"
16 #include "chrome/browser/extensions/extensions_service.h" 15 #include "chrome/browser/extensions/extensions_service.h"
17 #include "chrome/browser/platform_util.h" 16 #include "chrome/browser/platform_util.h"
18 #include "chrome/browser/tab_contents/tab_contents.h" 17 #include "chrome/browser/tab_contents/tab_contents.h"
19 #include "chrome/common/chrome_switches.h" 18 #include "chrome/common/chrome_switches.h"
20 #include "chrome/common/extensions/extension.h" 19 #include "chrome/common/extensions/extension.h"
21 #include "chrome/common/extensions/extension_constants.h" 20 #include "chrome/common/extensions/extension_constants.h"
22 #include "chrome/common/extensions/extension_icon_set.h" 21 #include "chrome/common/extensions/extension_icon_set.h"
23 #include "chrome/common/extensions/extension_resource.h" 22 #include "chrome/common/extensions/extension_resource.h"
24 #include "chrome/common/notification_service.h" 23 #include "chrome/common/notification_service.h"
25 #include "chrome/common/notification_type.h" 24 #include "chrome/common/notification_type.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 DOMMessageHandler* AppLauncherHandler::Attach(DOMUI* dom_ui) { 61 DOMMessageHandler* AppLauncherHandler::Attach(DOMUI* dom_ui) {
63 // TODO(arv): Add initialization code to the Apps store etc. 62 // TODO(arv): Add initialization code to the Apps store etc.
64 return DOMMessageHandler::Attach(dom_ui); 63 return DOMMessageHandler::Attach(dom_ui);
65 } 64 }
66 65
67 void AppLauncherHandler::RegisterMessages() { 66 void AppLauncherHandler::RegisterMessages() {
68 dom_ui_->RegisterMessageCallback("getApps", 67 dom_ui_->RegisterMessageCallback("getApps",
69 NewCallback(this, &AppLauncherHandler::HandleGetApps)); 68 NewCallback(this, &AppLauncherHandler::HandleGetApps));
70 dom_ui_->RegisterMessageCallback("launchApp", 69 dom_ui_->RegisterMessageCallback("launchApp",
71 NewCallback(this, &AppLauncherHandler::HandleLaunchApp)); 70 NewCallback(this, &AppLauncherHandler::HandleLaunchApp));
72 dom_ui_->RegisterMessageCallback("setLaunchType",
73 NewCallback(this, &AppLauncherHandler::HandleSetLaunchType));
74 dom_ui_->RegisterMessageCallback("uninstallApp", 71 dom_ui_->RegisterMessageCallback("uninstallApp",
75 NewCallback(this, &AppLauncherHandler::HandleUninstallApp)); 72 NewCallback(this, &AppLauncherHandler::HandleUninstallApp));
76 } 73 }
77 74
78 void AppLauncherHandler::Observe(NotificationType type, 75 void AppLauncherHandler::Observe(NotificationType type,
79 const NotificationSource& source, 76 const NotificationSource& source,
80 const NotificationDetails& details) { 77 const NotificationDetails& details) {
81 switch (type.value) { 78 switch (type.value) {
82 case NotificationType::EXTENSION_LOADED: 79 case NotificationType::EXTENSION_LOADED:
83 case NotificationType::EXTENSION_UNLOADED: 80 case NotificationType::EXTENSION_UNLOADED:
84 if (dom_ui_->tab_contents()) 81 if (dom_ui_->tab_contents())
85 HandleGetApps(NULL); 82 HandleGetApps(NULL);
86 break; 83 break;
87 case NotificationType::PREF_CHANGED: {
88 if (!dom_ui_->tab_contents())
89 break;
90 84
91 DictionaryValue dictionary;
92 FillAppDictionary(&dictionary);
93 dom_ui_->CallJavascriptFunction(L"appsPrefChangeCallback", dictionary);
94 break;
95 }
96 default: 85 default:
97 NOTREACHED(); 86 NOTREACHED();
98 } 87 }
99 } 88 }
100 89
101 // static 90 // static
102 void AppLauncherHandler::CreateAppInfo(Extension* extension, 91 void AppLauncherHandler::CreateAppInfo(Extension* extension,
103 ExtensionPrefs* extension_prefs,
104 DictionaryValue* value) { 92 DictionaryValue* value) {
105 value->Clear(); 93 value->Clear();
106 value->SetString("id", extension->id()); 94 value->SetString("id", extension->id());
107 value->SetString("name", extension->name()); 95 value->SetString("name", extension->name());
108 value->SetString("description", extension->description()); 96 value->SetString("description", extension->description());
109 value->SetString("launch_url", extension->GetFullLaunchURL().spec()); 97 value->SetString("launch_url", extension->GetFullLaunchURL().spec());
110 value->SetString("options_url", extension->options_url().spec()); 98 value->SetString("options_url", extension->options_url().spec());
99
111 value->SetString("icon_big", GetIconURL( 100 value->SetString("icon_big", GetIconURL(
112 extension, Extension::EXTENSION_ICON_LARGE, 101 extension, Extension::EXTENSION_ICON_LARGE,
113 "chrome://theme/IDR_APP_DEFAULT_ICON")); 102 "chrome://theme/IDR_APP_DEFAULT_ICON"));
114 value->SetString("icon_small", GetIconURL( 103 value->SetString("icon_small", GetIconURL(
115 extension, Extension::EXTENSION_ICON_BITTY, 104 extension, Extension::EXTENSION_ICON_BITTY,
116 std::string("chrome://favicon/") + extension->GetFullLaunchURL().spec())); 105 std::string("chrome://favicon/") + extension->GetFullLaunchURL().spec()));
117 value->SetInteger("launch_container", extension->launch_container());
118 value->SetInteger("launch_type",
119 extension_prefs->GetLaunchType(extension->id()));
120 } 106 }
121 107
122 void AppLauncherHandler::FillAppDictionary(DictionaryValue* dictionary) { 108 void AppLauncherHandler::HandleGetApps(const ListValue* args) {
109 bool show_debug_link = CommandLine::ForCurrentProcess()->HasSwitch(
110 switches::kAppsDebug);
111
112 DictionaryValue dictionary;
113 dictionary.SetBoolean("showDebugLink", show_debug_link);
114
123 ListValue* list = new ListValue(); 115 ListValue* list = new ListValue();
124 const ExtensionList* extensions = extensions_service_->extensions(); 116 const ExtensionList* extensions = extensions_service_->extensions();
125 for (ExtensionList::const_iterator it = extensions->begin(); 117 for (ExtensionList::const_iterator it = extensions->begin();
126 it != extensions->end(); ++it) { 118 it != extensions->end(); ++it) {
127 // Don't include the WebStore component app. The WebStore launcher 119 // Don't include the WebStore component app. The WebStore launcher
128 // gets special treatment in ntp/apps.js. 120 // gets special treatment in ntp/apps.js.
129 if ((*it)->is_app() && (*it)->id() != extension_misc::kWebStoreAppId) { 121 if ((*it)->is_app() && (*it)->id() != extension_misc::kWebStoreAppId) {
130 DictionaryValue* app_info = new DictionaryValue(); 122 DictionaryValue* app_info = new DictionaryValue();
131 CreateAppInfo(*it, extensions_service_->extension_prefs(), app_info); 123 CreateAppInfo(*it, app_info);
132 list->Append(app_info); 124 list->Append(app_info);
133 } 125 }
134 } 126 }
135 dictionary->Set("apps", list);
136 }
137 127
138 void AppLauncherHandler::HandleGetApps(const ListValue* args) { 128 dictionary.Set("apps", list);
139 DictionaryValue dictionary;
140 FillAppDictionary(&dictionary);
141 dom_ui_->CallJavascriptFunction(L"getAppsCallback", dictionary); 129 dom_ui_->CallJavascriptFunction(L"getAppsCallback", dictionary);
142 130
143 // First time we get here we set up the observer so that we can tell update 131 // First time we get here we set up the observer so that we can tell update
144 // the apps as they change. 132 // the apps as they change.
145 if (registrar_.IsEmpty()) { 133 if (registrar_.IsEmpty()) {
146 registrar_.Add(this, NotificationType::EXTENSION_LOADED, 134 registrar_.Add(this, NotificationType::EXTENSION_LOADED,
147 NotificationService::AllSources()); 135 NotificationService::AllSources());
148 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, 136 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
149 NotificationService::AllSources()); 137 NotificationService::AllSources());
150 } 138 }
151 if (pref_change_registrar_.IsEmpty()) {
152 pref_change_registrar_.Init(
153 extensions_service_->extension_prefs()->pref_service());
154 pref_change_registrar_.Add(ExtensionPrefs::kExtensionsPref, this);
155 }
156 } 139 }
157 140
158 void AppLauncherHandler::HandleLaunchApp(const ListValue* args) { 141 void AppLauncherHandler::HandleLaunchApp(const ListValue* args) {
159 std::string extension_id; 142 std::string extension_id;
160 int left = 0; 143 int left = 0;
161 int top = 0; 144 int top = 0;
162 int width = 0; 145 int width = 0;
163 int height = 0; 146 int height = 0;
164 147
165 if (!args->GetString(0, &extension_id) || 148 if (!args->GetString(0, &extension_id) ||
166 !ExtractInt(args, 1, &left) || 149 !ExtractInt(args, 1, &left) ||
167 !ExtractInt(args, 2, &top) || 150 !ExtractInt(args, 2, &top) ||
168 !ExtractInt(args, 3, &width) || 151 !ExtractInt(args, 3, &width) ||
169 !ExtractInt(args, 4, &height)) { 152 !ExtractInt(args, 4, &height)) {
170 NOTREACHED(); 153 NOTREACHED();
171 return; 154 return;
172 } 155 }
173 156
174 // The rect we get from the client is relative to the browser client viewport. 157 // The rect we get from the client is relative to the browser client viewport.
175 // Offset the rect by the tab contents bounds. 158 // Offset the rect by the tab contents bounds.
176 gfx::Rect rect(left, top, width, height); 159 gfx::Rect rect(left, top, width, height);
177 gfx::Rect tab_contents_bounds; 160 gfx::Rect tab_contents_bounds;
178 dom_ui_->tab_contents()->GetContainerBounds(&tab_contents_bounds); 161 dom_ui_->tab_contents()->GetContainerBounds(&tab_contents_bounds);
179 rect.Offset(tab_contents_bounds.origin()); 162 rect.Offset(tab_contents_bounds.origin());
180 163
181 Extension* extension = 164 Extension* extension =
182 extensions_service_->GetExtensionById(extension_id, false); 165 extensions_service_->GetExtensionById(extension_id, false);
183 DCHECK(extension); 166 DCHECK(extension);
184 Profile* profile = extensions_service_->profile(); 167 Profile* profile = extensions_service_->profile();
168 extension_misc::LaunchContainer container = extension->launch_container();
185 169
186 // To give a more "launchy" experience when using the NTP launcher, we close 170 // To give a more "launchy" experience when using the NTP launcher, we close
187 // it automatically. 171 // it automatically.
188 Browser* browser = BrowserList::GetLastActive(); 172 Browser* browser = BrowserList::GetLastActive();
189 TabContents* old_contents = NULL; 173 TabContents* old_contents = NULL;
190 if (browser) 174 if (browser)
191 old_contents = browser->GetSelectedTabContents(); 175 old_contents = browser->GetSelectedTabContents();
192 176
193 AnimateAppIcon(extension, rect); 177 AnimateAppIcon(extension, rect);
194 Browser::OpenApplication(profile, extension, extension->launch_container()); 178 Browser::OpenApplication(profile, extension, container);
195 179
196 if (old_contents && 180 if (old_contents &&
197 old_contents->GetURL().GetOrigin() == 181 old_contents->GetURL().GetOrigin() ==
198 GURL(chrome::kChromeUINewTabURL).GetOrigin()) { 182 GURL(chrome::kChromeUINewTabURL).GetOrigin()) {
199 browser->CloseTabContents(old_contents); 183 browser->CloseTabContents(old_contents);
200 } 184 }
201 } 185 }
202 186
203 void AppLauncherHandler::HandleSetLaunchType(const ListValue* args) {
204 std::string extension_id;
205 int launch_type;
206 if (!args->GetString(0, &extension_id) ||
207 !ExtractInt(args, 1, &launch_type)) {
208 NOTREACHED();
209 return;
210 }
211
212 Extension* extension =
213 extensions_service_->GetExtensionById(extension_id, false);
214 DCHECK(extension);
215
216 extensions_service_->extension_prefs()->SetLaunchType(
217 extension_id,
218 static_cast<ExtensionPrefs::LaunchType>(launch_type));
219 }
220
221 void AppLauncherHandler::AnimateAppIcon(Extension* extension, 187 void AppLauncherHandler::AnimateAppIcon(Extension* extension,
222 const gfx::Rect& rect) { 188 const gfx::Rect& rect) {
223 // We make this check for the case of minimized windows, unit tests, etc. 189 // We make this check for the case of minimized windows, unit tests, etc.
224 if (platform_util::IsVisible(dom_ui_->tab_contents()->GetNativeView()) && 190 if (platform_util::IsVisible(dom_ui_->tab_contents()->GetNativeView()) &&
225 Animation::ShouldRenderRichAnimation()) { 191 Animation::ShouldRenderRichAnimation()) {
226 #if defined(OS_WIN) 192 #if defined(OS_WIN)
227 AppLaunchedAnimation::Show(extension, rect); 193 AppLaunchedAnimation::Show(extension, rect);
228 #else 194 #else
229 NOTIMPLEMENTED(); 195 NOTIMPLEMENTED();
230 #endif 196 #endif
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 return; 228 return;
263 229
264 extensions_service_->UninstallExtension(extension_id_prompting_, 230 extensions_service_->UninstallExtension(extension_id_prompting_,
265 false /* external_uninstall */); 231 false /* external_uninstall */);
266 extension_id_prompting_ = ""; 232 extension_id_prompting_ = "";
267 } 233 }
268 234
269 void AppLauncherHandler::InstallUIAbort() { 235 void AppLauncherHandler::InstallUIAbort() {
270 extension_id_prompting_ = ""; 236 extension_id_prompting_ = "";
271 } 237 }
OLDNEW
« no previous file with comments | « chrome/browser/dom_ui/app_launcher_handler.h ('k') | chrome/browser/dom_ui/ntp_resource_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698