15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_EXTENSIONS_APPLICATION_LAUNCH_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_EXTENSIONS_APPLICATION_LAUNCH_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/command_line.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h"
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/common/extensions/extension_constants.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/window_open_disposition.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h"
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Browser;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace base {
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CommandLine;
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AppLaunchParams {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AppLaunchParams(Profile* profile,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  const extensions::Extension* extension,
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                  extensions::LaunchContainer container,
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  WindowOpenDisposition disposition);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Helper to create AppLaunchParams using extensions::GetLaunchContainer with
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // LAUNCH_TYPE_REGULAR to check for a user-configured container.
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AppLaunchParams(Profile* profile,
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  const extensions::Extension* extension,
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  WindowOpenDisposition disposition);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Helper to create AppLaunchParams using event flags that allows user to
448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // override the user-configured container using modifier keys, falling back to
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // extensions::GetLaunchContainer() with no modifiers. |desktop_type|
468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // indicates the desktop upon which to launch (Ash or Native).
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AppLaunchParams(Profile* profile,
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  const extensions::Extension* extension,
498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                  int event_flags,
508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                  chrome::HostDesktopType desktop_type);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ~AppLaunchParams();
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The profile to load the application from.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The extension to load.
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string extension_id;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The container type to launch the application in.
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  extensions::LaunchContainer container;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If container is TAB, this field controls how the tab is opened.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WindowOpenDisposition disposition;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // The desktop type to launch on. Uses GetActiveDesktop() if unspecified.
678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  chrome::HostDesktopType desktop_type;
688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If non-empty, use override_url in place of the application's launch url.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL override_url;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // If non-empty, use override_boudns in place of the application's default
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // position and dimensions.
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect override_bounds;
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // If non-empty, information from the command line may be passed on to the
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // application.
78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::CommandLine command_line;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If non-empty, the current directory from which any relative paths on the
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // command line should be expanded from.
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath current_directory;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Opens the application, possibly prompting the user to re-enable it.
8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void OpenApplicationWithReenablePrompt(const AppLaunchParams& params);
8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Open the application in a way specified by |params|.
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)content::WebContents* OpenApplication(const AppLaunchParams& params);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Open |url| in an app shortcut window.
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// There are two kinds of app shortcuts: Shortcuts to a URL,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and shortcuts that open an installed application.  This function
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is used to open the former.  To open the latter, use
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// application_launch::OpenApplication().
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebContents* OpenAppShortcutWindow(Profile* profile,
9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                            const GURL& url);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Whether the extension can be launched by sending a
100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// chrome.app.runtime.onLaunched event.
101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool CanLaunchViaEvent(const extensions::Extension* extension);
102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Get the launch URL for a given extension, with optional override/fallback.
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// |override_url|, if non-empty, will be preferred over the extension's
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// launch url.
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciGURL UrlForExtension(const extensions::Extension* extension,
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     const GURL& override_url);
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_EXTENSIONS_APPLICATION_LAUNCH_H_
110