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

Side by Side Diff: chrome/browser/ui/extensions/application_launch.cc

Issue 10700130: Introduce LaunchParams struct for opening chrome apps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix bad merge Created 8 years, 5 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/extensions/application_launch.h" 5 #include "chrome/browser/ui/extensions/application_launch.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/field_trial.h" 8 #include "base/metrics/field_trial.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "chrome/browser/extensions/default_apps_trial.h" 10 #include "chrome/browser/extensions/default_apps_trial.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 } 72 }
73 73
74 return url; 74 return url;
75 } 75 }
76 76
77 bool AllowPanels(const std::string& app_name) { 77 bool AllowPanels(const std::string& app_name) {
78 return PanelManager::ShouldUsePanels( 78 return PanelManager::ShouldUsePanels(
79 web_app::GetExtensionIdFromApplicationName(app_name)); 79 web_app::GetExtensionIdFromApplicationName(app_name));
80 } 80 }
81 81
82 } // namespace
83
84 namespace application_launch {
85
86 WebContents* OpenApplication(Profile* profile,
87 const Extension* extension,
88 extension_misc::LaunchContainer container,
89 const GURL& override_url,
90 WindowOpenDisposition disposition,
91 const CommandLine* command_line) {
92 WebContents* tab = NULL;
93 ExtensionPrefs* prefs = profile->GetExtensionService()->extension_prefs();
94 prefs->SetActiveBit(extension->id(), true);
95
96 UMA_HISTOGRAM_ENUMERATION("Extensions.AppLaunchContainer", container, 100);
97 #if defined(OS_CHROMEOS)
98 if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled())
99 chromeos::KioskModeMetrics::Get()->UserOpenedApp();
100 #endif
101
102 if (extension->is_platform_app()) {
103 extensions::LaunchPlatformApp(profile, extension, command_line);
104 return NULL;
105 }
106
107 switch (container) {
108 case extension_misc::LAUNCH_NONE: {
109 NOTREACHED();
110 break;
111 }
112 case extension_misc::LAUNCH_PANEL:
113 case extension_misc::LAUNCH_WINDOW:
114 tab = OpenApplicationWindow(profile, extension, container,
115 override_url, NULL);
116 break;
117 case extension_misc::LAUNCH_TAB: {
118 tab = OpenApplicationTab(profile, extension, override_url,
119 disposition);
120 break;
121 }
122 default:
123 NOTREACHED();
124 break;
125 }
126 return tab;
127 }
128
129 WebContents* OpenApplicationWindow( 82 WebContents* OpenApplicationWindow(
130 Profile* profile, 83 Profile* profile,
131 const Extension* extension, 84 const Extension* extension,
132 extension_misc::LaunchContainer container, 85 extension_misc::LaunchContainer container,
133 const GURL& url_input, 86 const GURL& url_input,
134 Browser** app_browser) { 87 Browser** app_browser) {
135 DCHECK(!url_input.is_empty() || extension); 88 DCHECK(!url_input.is_empty() || extension);
136 GURL url = UrlForExtension(extension, url_input); 89 GURL url = UrlForExtension(extension, url_input);
137 90
138 std::string app_name; 91 std::string app_name;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 } 143 }
191 144
192 browser->window()->Show(); 145 browser->window()->Show();
193 146
194 // TODO(jcampan): http://crbug.com/8123 we should not need to set the initial 147 // TODO(jcampan): http://crbug.com/8123 we should not need to set the initial
195 // focus explicitly. 148 // focus explicitly.
196 contents->GetView()->SetInitialFocus(); 149 contents->GetView()->SetInitialFocus();
197 return contents; 150 return contents;
198 } 151 }
199 152
200 WebContents* OpenAppShortcutWindow(Profile* profile,
201 const GURL& url,
202 bool update_shortcut) {
203 Browser* app_browser;
204 WebContents* tab = OpenApplicationWindow(
205 profile,
206 NULL, // this is a URL app. No extension.
207 extension_misc::LAUNCH_WINDOW,
208 url,
209 &app_browser);
210
211 if (!tab)
212 return NULL;
213
214 if (update_shortcut) {
215 TabContents* tab_contents = TabContents::FromWebContents(tab);
216 // Set UPDATE_SHORTCUT as the pending web app action. This action is picked
217 // up in LoadingStateChanged to schedule a GetApplicationInfo. And when
218 // the web app info is available, ExtensionTabHelper notifies Browser via
219 // OnDidGetApplicationInfo, which calls
220 // web_app::UpdateShortcutForTabContents when it sees UPDATE_SHORTCUT as
221 // pending web app action.
222 tab_contents->extension_tab_helper()->set_pending_web_app_action(
223 ExtensionTabHelper::UPDATE_SHORTCUT);
224 }
225 return tab;
226 }
227
228 WebContents* OpenApplicationTab(Profile* profile, 153 WebContents* OpenApplicationTab(Profile* profile,
229 const Extension* extension, 154 const Extension* extension,
230 const GURL& override_url, 155 const GURL& override_url,
231 WindowOpenDisposition disposition) { 156 WindowOpenDisposition disposition) {
232 Browser* browser = browser::FindTabbedBrowser(profile, false); 157 Browser* browser = browser::FindTabbedBrowser(profile, false);
233 WebContents* contents = NULL; 158 WebContents* contents = NULL;
234 if (!browser) { 159 if (!browser) {
235 // No browser for this profile, need to open a new one. 160 // No browser for this profile, need to open a new one.
236 browser = Browser::Create(profile); 161 browser = Browser::Create(profile);
237 browser->window()->Show(); 162 browser->window()->Show();
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 // full screen mode in this case? 234 // full screen mode in this case?
310 if (launch_type == ExtensionPrefs::LAUNCH_FULLSCREEN && 235 if (launch_type == ExtensionPrefs::LAUNCH_FULLSCREEN &&
311 !browser->window()->IsFullscreen()) { 236 !browser->window()->IsFullscreen()) {
312 chrome::ToggleFullscreenMode(browser); 237 chrome::ToggleFullscreenMode(browser);
313 } 238 }
314 #endif 239 #endif
315 240
316 return contents; 241 return contents;
317 } 242 }
318 243
244 WebContents* OpenApplicationPanel(
245 Profile* profile,
246 const Extension* extension,
247 const GURL& url_input) {
248 GURL url = UrlForExtension(extension, url_input);
249 std::string app_name =
250 web_app::GenerateApplicationNameFromExtensionId(extension->id());
251 gfx::Rect panel_bounds;
252 panel_bounds.set_width(extension->launch_width());
253 panel_bounds.set_height(extension->launch_height());
254 #if defined(USE_ASH)
255 PanelViewAura* panel_view = new PanelViewAura(app_name);
256 panel_view->Init(profile, url, panel_bounds);
257 return panel_view->WebContents();
258 #else
259 Panel* panel = PanelManager::GetInstance()->CreatePanel(
260 app_name, profile, url, panel_bounds.size());
261 panel->Show();
262 return panel->GetWebContents();
263 #endif
264 }
265
266 } // namespace
267
268 namespace application_launch {
269
270 LaunchParams::LaunchParams(Profile* profile,
271 const extensions::Extension* extension,
272 extension_misc::LaunchContainer container,
273 WindowOpenDisposition disposition)
274 : profile(profile),
275 extension(extension),
276 container(container),
277 disposition(disposition),
278 override_url(),
279 command_line(NULL) {}
280
281 WebContents* OpenApplication(const LaunchParams& params) {
282 Profile* profile = params.profile;
283 const extensions::Extension* extension = params.extension;
284 extension_misc::LaunchContainer container = params.container;
285 const GURL& override_url = params.override_url;
286
287 WebContents* tab = NULL;
288 ExtensionPrefs* prefs = profile->GetExtensionService()->extension_prefs();
289 prefs->SetActiveBit(extension->id(), true);
290
291 UMA_HISTOGRAM_ENUMERATION("Extensions.AppLaunchContainer", container, 100);
292 #if defined(OS_CHROMEOS)
293 if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled())
294 chromeos::KioskModeMetrics::Get()->UserOpenedApp();
295 #endif
296
297 if (extension->is_platform_app()) {
298 extensions::LaunchPlatformApp(profile, extension, params.command_line);
299 return NULL;
300 }
301
302 switch (container) {
303 case extension_misc::LAUNCH_NONE: {
304 NOTREACHED();
305 break;
306 }
307 case extension_misc::LAUNCH_PANEL:
308 case extension_misc::LAUNCH_WINDOW:
309 tab = OpenApplicationWindow(profile, extension, container,
310 override_url, NULL);
311 break;
312 case extension_misc::LAUNCH_TAB: {
313 tab = OpenApplicationTab(profile, extension, override_url,
314 params.disposition);
315 break;
316 }
317 default:
318 NOTREACHED();
319 break;
320 }
321 return tab;
322 }
323
324 WebContents* OpenAppShortcutWindow(Profile* profile,
325 const GURL& url) {
326 Browser* app_browser;
327 WebContents* tab = OpenApplicationWindow(
328 profile,
329 NULL, // this is a URL app. No extension.
330 extension_misc::LAUNCH_WINDOW,
331 url,
332 &app_browser);
333
334 if (!tab)
335 return NULL;
336
337 TabContents* tab_contents = TabContents::FromWebContents(tab);
338 // Set UPDATE_SHORTCUT as the pending web app action. This action is picked
339 // up in LoadingStateChanged to schedule a GetApplicationInfo. And when
340 // the web app info is available, ExtensionTabHelper notifies Browser via
341 // OnDidGetApplicationInfo, which calls
342 // web_app::UpdateShortcutForTabContents when it sees UPDATE_SHORTCUT as
343 // pending web app action.
344 tab_contents->extension_tab_helper()->set_pending_web_app_action(
345 ExtensionTabHelper::UPDATE_SHORTCUT);
346
347 return tab;
348 }
349
319 } // namespace application_launch 350 } // namespace application_launch
OLDNEW
« no previous file with comments | « chrome/browser/ui/extensions/application_launch.h ('k') | chrome/browser/ui/startup/startup_browser_creator_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698