summaryrefslogtreecommitdiff
path: root/chromium/extensions/common/api/app_runtime.idl
blob: bec8040134c2a468e48307dd12a13dae210b70f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Use the <code>chrome.app.runtime</code> API to manage the app lifecycle.
// The app runtime manages app installation, controls the event page, and can
// shut down the app at anytime.
namespace app.runtime {

  [inline_doc] dictionary LaunchItem {
    // Entry for the item.
    [instanceOf=Entry] object entry;

    // The MIME type of the file.
    DOMString? type;
  };

  // Enumeration of app launch sources.
  // This should be kept in sync with AppLaunchSource in
  // extensions/common/constants.h, and GetLaunchSourceEnum() in
  // extensions/browser/api/app_runtime/app_runtime_api.cc.
  // Note the enumeration is used in UMA histogram so entries
  // should not be re-ordered or removed.
  enum LaunchSource {
    untracked,
    app_launcher,
    new_tab_page,
    reload,
    restart,
    load_and_launch,
    command_line,
    file_handler,
    url_handler,
    system_tray,
    about_page,
    keyboard,
    extensions_page,
    management_api,
    ephemeral_app,
    background,
    kiosk,
    chrome_internal,
    test,
    installed_notification
  };

  // An app can be launched with a specific action in mind, for example, to
  // create a new note. The type of action the app was launched
  // with is available inside of the |actionData| field from the LaunchData
  // instance.
  enum ActionType {
    // The user wants to quickly take a new note.
    new_note
  };

  // Status of the play store.
  [nodoc] enum PlayStoreStatus {
    // Indicates that the play store is enabled. It also implies available.
    enabled,
    // Indicates that the play store is available but not enabled.
    available,
    // Indicates that the play store status is unknown.
    unknown
  };

  // Optional data that includes action-specific launch information.
  dictionary ActionData {
    ActionType actionType;
  };

  // Optional data for the launch. Either <code>items</code>, or
  // the pair (<code>url, referrerUrl</code>) can be present for any given
  // launch.
  [inline_doc] dictionary LaunchData {
    // The ID of the file or URL handler that the app is being invoked with.
    // Handler IDs are the top-level keys in the <code>file_handlers</code>
    // and/or <code>url_handlers</code> dictionaries in the manifest.
    DOMString? id;

    // The file entries for the <code>onLaunched</code> event triggered by a
    // matching file handler in the <code>file_handlers</code> manifest key.
    LaunchItem[]? items;

    // The URL for the <code>onLaunched</code> event triggered by a matching
    // URL handler in the <code>url_handlers</code> manifest key.
    DOMString? url;

    // The referrer URL for the <code>onLaunched</code> event triggered by a
    // matching URL handler in the <code>url_handlers</code> manifest key.
    DOMString? referrerUrl;

    // Whether the app is being launched in a <a
    // href="https://support.google.com/chromebook/answer/3134673">Chrome OS
    // kiosk session</a>.
    boolean? isKioskSession;

    // Whether the app is being launched in a <a
    // href="https://support.google.com/chrome/a/answer/3017014">Chrome OS
    // public session</a>.
    boolean? isPublicSession;

    // Where the app is launched from.
    LaunchSource? source;

    // Contains data that specifies the <code>ActionType</code> this app was
    // launched with. This is null if the app was not launched with a specific
    // action intent.
    ActionData? actionData;

    // Internal fields used to indicate ARC status on the device.
    [nodoc] PlayStoreStatus? playStoreStatus;
  };

  // This object specifies details and operations to perform on the embedding
  // request. The app to be embedded can make a decision on whether or not to
  // allow the embedding and what to embed based on the embedder making the
  // request.
  dictionary EmbedRequest {
    DOMString embedderId;

    // Optional developer specified data that the app to be embedded can use
    // when making an embedding decision.
    any? data;

    // Allows <code>embedderId</code> to embed this app in an &lt;appview&gt;
    // element. The <code>url</code> specifies the content to embed.
    [nocompile] static void allow(DOMString url);

    // Prevents <code> embedderId</code> from embedding this app in an
    // &lt;appview&gt; element.
    [nocompile] static void deny();
  };

  interface Events {
    // Fired when an embedding app requests to embed this app. This event is
    // only available on dev channel with the flag --enable-app-view.
    static void onEmbedRequested(EmbedRequest request);

    // Fired when an app is launched from the launcher.
    static void onLaunched(optional LaunchData launchData);

    // Fired at Chrome startup to apps that were running when Chrome last shut
    // down, or when apps have been requested to restart from their previous
    // state for other reasons (e.g. when the user revokes access to an app's
    // retained files the runtime will restart the app). In these situations if
    // apps do not have an <code>onRestarted</code> handler they will be sent
    // an <code>onLaunched </code> event instead.
    static void onRestarted();
  };
};