Upstream version 10.38.222.0
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / api / app_window.idl
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
3 // found in the LICENSE file.
4
5 // Use the <code>chrome.app.window</code> API to create windows. Windows
6 // have an optional frame with title bar and size controls. They are not
7 // associated with any Chrome browser windows. See the <a
8 // href="https://github.com/GoogleChrome/chrome-app-samples/tree/master/window-state">
9 // Window State Sample</a> for a demonstration of these options.
10 namespace app.window {
11
12   // Previously named Bounds.
13   dictionary ContentBounds {
14     long? left;
15     long? top;
16     long? width;
17     long? height;
18   };
19
20   dictionary BoundsSpecification {
21     // The X coordinate of the content or window.
22     long? left;
23
24     // The Y coordinate of the content or window.
25     long? top;
26
27     // The width of the content or window.
28     long? width;
29
30     // The height of the content or window.
31     long? height;
32
33     // The minimum width of the content or window.
34     long? minWidth;
35
36     // The minimum height of the content or window.
37     long? minHeight;
38
39     // The maximum width of the content or window.
40     long? maxWidth;
41
42     // The maximum height of the content or window.
43     long? maxHeight;
44   };
45
46   dictionary Bounds {
47     // This property can be used to read or write the current X coordinate of
48     // the content or window.
49     long left;
50
51     // This property can be used to read or write the current Y coordinate of
52     // the content or window.
53     long top;
54
55     // This property can be used to read or write the current width of the
56     // content or window.
57     long width;
58
59     // This property can be used to read or write the current height of the
60     // content or window.
61     long height;
62
63     // This property can be used to read or write the current minimum width of
64     // the content or window. A value of <code>null</code> indicates
65     // 'unspecified'.
66     long? minWidth;
67
68     // This property can be used to read or write the current minimum height of
69     // the content or window. A value of <code>null</code> indicates
70     // 'unspecified'.
71     long? minHeight;
72
73     // This property can be used to read or write the current maximum width of
74     // the content or window. A value of <code>null</code> indicates
75     // 'unspecified'.
76     long? maxWidth;
77
78     // This property can be used to read or write the current maximum height of
79     // the content or window. A value of <code>null</code> indicates
80     // 'unspecified'.
81     long? maxHeight;
82
83     // Set the left and top position of the content or window.
84     static void setPosition(long left, long top);
85
86     // Set the width and height of the content or window.
87     static void setSize(long width, long height);
88
89     // Set the minimum size constraints of the content or window. The minimum
90     // width or height can be set to <code>null</code> to remove the constraint.
91     // A value of <code>undefined</code> will leave a constraint unchanged.
92     static void setMinimumSize(long minWidth, long minHeight);
93
94     // Set the maximum size constraints of the content or window. The maximum
95     // width or height can be set to <code>null</code> to remove the constraint.
96     // A value of <code>undefined</code> will leave a constraint unchanged.
97     static void setMaximumSize(long maxWidth, long maxHeight);
98   };
99
100   dictionary FrameOptions {
101     // Frame type: <code>none</code> or <code>chrome</code> (defaults to
102     // <code>chrome</code>).
103     //
104     // For <code>none</code>, the <code>-webkit-app-region</code> CSS property
105     // can be used to apply draggability to the app's window.
106     //
107     // <code>-webkit-app-region: drag</code> can be used to mark regions
108     // draggable. <code>no-drag</code> can be used to disable this style on
109     // nested elements.
110     DOMString? type;
111     // Allows the frame color to be set. Frame coloring is only available if the
112     // frame type is <code>chrome</code>.
113     //
114     // Frame coloring is new in Chrome 36.
115     DOMString? color;
116     // Allows the frame color of the window when active to be set. Frame
117     // coloring is only available if the frame type is <code>chrome</code>.
118     //
119     // Frame coloring is only available if the frame type is
120     // <code>chrome</code>.
121     //
122     // Frame coloring is new in Chrome 36.
123     DOMString? activeColor;
124     // Allows the frame color of the window when inactive to be set differently
125     // to the active color. Frame
126     // coloring is only available if the frame type is <code>chrome</code>.
127     //
128     // <code>inactiveColor</code> must be used in conjunction with <code>
129     // color</code>.
130     //
131     // Frame coloring is new in Chrome 36.
132     DOMString? inactiveColor;
133   };
134
135   // State of a window: normal, fullscreen, maximized, minimized.
136   enum State { normal, fullscreen, maximized, minimized };
137
138   // 'shell' is the default window type. 'panel' is managed by the OS
139   // (Currently experimental, Ash only).
140   [nodoc] enum WindowType { shell, panel };
141
142   [noinline_doc] dictionary CreateWindowOptions {
143     // Id to identify the window. This will be used to remember the size
144     // and position of the window and restore that geometry when a window
145     // with the same id is later opened.
146     // If a window with a given id is created while another window with the same
147     // id already exists, the currently opened window will be focused instead of
148     // creating a new window.
149     DOMString? id;
150
151     // Used to specify the initial position, initial size and constraints of the
152     // window's content (excluding window decorations).
153     // If an <code>id</code> is also specified and a window with a matching
154     // <code>id</code> has been shown before, the remembered bounds will be used
155     // instead.
156     //
157     // Note that the padding between the inner and outer bounds is determined by
158     // the OS. Therefore setting the same bounds property for both the
159     // <code>innerBounds</code> and <code>outerBounds</code> will result in an
160     // error.
161     //
162     // This property is new in Chrome 36.
163     BoundsSpecification? innerBounds;
164
165     // Used to specify the initial position, initial size and constraints of the
166     // window (including window decorations such as the title bar and frame).
167     // If an <code>id</code> is also specified and a window with a matching
168     // <code>id</code> has been shown before, the remembered bounds will be used
169     // instead.
170     //
171     // Note that the padding between the inner and outer bounds is determined by
172     // the OS. Therefore setting the same bounds property for both the
173     // <code>innerBounds</code> and <code>outerBounds</code> will result in an
174     // error.
175     //
176     // This property is new in Chrome 36.
177     BoundsSpecification? outerBounds;
178
179     // Default width of the window.
180     [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? defaultWidth;
181
182     // Default height of the window.
183     [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? defaultHeight;
184
185     // Default X coordinate of the window.
186     [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? defaultLeft;
187
188     // Default Y coordinate of the window.
189     [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? defaultTop;
190
191     // Width of the window.
192     [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? width;
193
194     // Height of the window.
195     [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? height;
196
197     // X coordinate of the window.
198     [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? left;
199
200     // Y coordinate of the window.
201     [nodoc, deprecated="Use $(ref:BoundsSpecification)."] long? top;
202
203     // Minimum width of the window.
204     [deprecated="Use innerBounds or outerBounds."] long? minWidth;
205
206     // Minimum height of the window.
207     [deprecated="Use innerBounds or outerBounds."] long? minHeight;
208
209     // Maximum width of the window.
210     [deprecated="Use innerBounds or outerBounds."] long? maxWidth;
211
212     // Maximum height of the window.
213     [deprecated="Use innerBounds or outerBounds."] long? maxHeight;
214
215     // Type of window to create.
216     [nodoc] WindowType? type;
217
218     // Frame type: <code>none</code> or <code>chrome</code> (defaults to
219     // <code>chrome</code>). For <code>none</code>, the
220     // <code>-webkit-app-region</code> CSS property can be used to apply
221     // draggability to the app's window. <code>-webkit-app-region: drag</code>
222     // can be used to mark regions draggable. <code>no-drag</code> can be used
223     // to disable this style on nested elements.
224     //
225     // Use of <code>FrameOptions</code> is new in M36.
226     (DOMString or FrameOptions)? frame;
227
228     // Size and position of the content in the window (excluding the titlebar).
229     // If an id is also specified and a window with a matching id has been shown
230     // before, the remembered bounds of the window will be used instead.
231     [deprecated="Use innerBounds or outerBounds."] ContentBounds? bounds;
232
233     // Enable window background transparency.
234     // Only supported in ash. Requires app.window.alpha API permission.
235     boolean? alphaEnabled;
236
237     // The initial state of the window, allowing it to be created already
238     // fullscreen, maximized, or minimized. Defaults to 'normal'.
239     State? state;
240
241     // If true, the window will be created in a hidden state. Call show() on
242     // the window to show it once it has been created. Defaults to false.
243     boolean? hidden;
244
245     // If true, the window will be resizable by the user. Defaults to true.
246     boolean? resizable;
247
248     // By default if you specify an id for the window, the window will only be
249     // created if another window with the same id doesn't already exist. If a
250     // window with the same id already exists that window is activated instead.
251     // If you do want to create multiple windows with the same id, you can
252     // set this property to false.
253     [deprecated="Multiple windows with the same id is no longer supported."] boolean? singleton;
254
255     // If true, the window will stay above most other windows. If there are
256     // multiple windows of this kind, the currently focused window will be in
257     // the foreground. Requires the <code>"alwaysOnTopWindows"</code>
258     // permission. Defaults to false.
259     //
260     // Call <code>setAlwaysOnTop()</code> on the window to change this property
261     // after creation.
262     boolean? alwaysOnTop;
263
264     // If true, the window will be focused when created. Defaults to true.
265     boolean? focused;
266   };
267
268   // Called in the creating window (parent) before the load event is called in
269   // the created window (child). The parent can set fields or functions on the
270   // child usable from onload. E.g. background.js:
271   //
272   // <code>function(createdWindow) { createdWindow.contentWindow.foo =
273   // function () { }; };</code>
274   //
275   // window.js:
276   //
277   // <code>window.onload = function () { foo(); }</code>
278   callback CreateWindowCallback =
279       void ([instanceOf=AppWindow] object createdWindow);
280
281   [noinline_doc] dictionary AppWindow {
282     // Focus the window.
283     static void focus();
284
285     // Fullscreens the window.
286     //
287     // The user will be able to restore the window by pressing ESC. An
288     // application can prevent the fullscreen state to be left when ESC is
289     // pressed by requesting the <b>overrideEscFullscreen</b> permission and
290     // canceling the event by calling .preventDefault(), like this:
291     //
292     // <code>window.onKeyDown = function(e) { if (e.keyCode == 27 /* ESC */) {
293     // e.preventDefault(); } };</code>
294     static void fullscreen();
295
296     // Is the window fullscreen?
297     static boolean isFullscreen();
298
299     // Minimize the window.
300     static void minimize();
301
302     // Is the window minimized?
303     static boolean isMinimized();
304
305     // Maximize the window.
306     static void maximize();
307
308     // Is the window maximized?
309     static boolean isMaximized();
310
311     // Restore the window, exiting a maximized, minimized, or fullscreen state.
312     static void restore();
313
314     // Move the window to the position (|left|, |top|).
315     static void moveTo(long left, long top);
316
317     // Resize the window to |width|x|height| pixels in size.
318     static void resizeTo(long width, long height);
319
320     // Draw attention to the window.
321     static void drawAttention();
322
323     // Clear attention to the window.
324     static void clearAttention();
325
326     // Close the window.
327     static void close();
328
329     // Show the window. Does nothing if the window is already visible.
330     // Focus the window if |focused| is set to true or omitted.
331     static void show(optional boolean focused);
332
333     // Hide the window. Does nothing if the window is already hidden.
334     static void hide();
335
336     // Get the window's inner bounds as a $(ref:ContentBounds) object.
337     [nocompile, deprecated="Use innerBounds or outerBounds."] static ContentBounds getBounds();
338
339     // Set the window's inner bounds.
340     [nocompile, deprecated="Use innerBounds or outerBounds."] static void setBounds(ContentBounds bounds);
341
342     // Set the app icon for the window (experimental).
343     // Currently this is only being implemented on Ash.
344     // TODO(stevenjb): Investigate implementing this on Windows and OSX.
345     [nodoc] static void setIcon(DOMString iconUrl);
346
347     // Set a badge icon for the window.
348     // TODO(benwells): Document this properly before going to stable.
349     [nodoc] static void setBadgeIcon(DOMString iconUrl);
350
351     // Clear the current for the window.
352     // TODO(benwells): Document this properly before going to stable.
353     [nodoc] static void clearBadge();
354
355     // Is the window always on top?
356     static boolean isAlwaysOnTop();
357
358     // Accessors for testing.
359     [nodoc] boolean hasFrameColor;
360     [nodoc] long activeFrameColor;
361     [nodoc] long inactiveFrameColor;
362     [nodoc] boolean? firstShowHasHappened;
363
364     // Set whether the window should stay above most other windows. Requires the
365     // <code>"alwaysOnTopWindows"</code> permission.
366     static void setAlwaysOnTop(boolean alwaysOnTop);
367
368     // Can the window use alpha transparency?
369     // TODO(jackhou): Document this properly before going to stable.
370     [nodoc] static boolean alphaEnabled();
371
372     // The JavaScript 'window' object for the created child.
373     [instanceOf=Window] object contentWindow;
374
375     // The id the window was created with.
376     DOMString id;
377
378     // The position, size and constraints of the window's content, which does
379     // not include window decorations.
380     // This property is new in Chrome 36.
381     Bounds innerBounds;
382
383     // The position, size and constraints of the window, which includes window
384     // decorations, such as the title bar and frame.
385     // This property is new in Chrome 36.
386     Bounds outerBounds;
387   };
388
389   interface Functions {
390     // The size and position of a window can be specified in a number of
391     // different ways. The most simple option is not specifying anything at
392     // all, in which case a default size and platform dependent position will
393     // be used.
394     //
395     // To set the position, size and constraints of the window, use the
396     // <code>innerBounds</code> or <code>outerBounds</code> properties. Inner
397     // bounds do not include window decorations. Outer bounds include the
398     // window's title bar and frame. Note that the padding between the inner and
399     // outer bounds is determined by the OS. Therefore setting the same property
400     // for both inner and outer bounds is considered an error (for example,
401     // setting both <code>innerBounds.left</code> and
402     // <code>outerBounds.left</code>).
403     //
404     // To automatically remember the positions of windows you can give them ids.
405     // If a window has an id, This id is used to remember the size and position
406     // of the window whenever it is moved or resized. This size and position is
407     // then used instead of the specified bounds on subsequent opening of a
408     // window with the same id. If you need to open a window with an id at a
409     // location other than the remembered default, you can create it hidden,
410     // move it to the desired location, then show it.
411     static void create(DOMString url,
412                        optional CreateWindowOptions options,
413                        optional CreateWindowCallback callback);
414
415     // Returns an $(ref:AppWindow) object for the
416     // current script context (ie JavaScript 'window' object). This can also be
417     // called on a handle to a script context for another page, for example:
418     // otherWindow.chrome.app.window.current().
419     [nocompile] static AppWindow current();
420     [nocompile, nodoc] static void initializeAppWindow(object state);
421
422     // Gets an array of all currently created app windows. This method is new in
423     // Chrome 33.
424     [nocompile] static AppWindow[] getAll();
425
426     // Gets an $(ref:AppWindow) with the given id. If no window with the given id
427     // exists null is returned. This method is new in Chrome 33.
428     [nocompile] static AppWindow get(DOMString id);
429   };
430
431   interface Events {
432     // Fired when the window is resized.
433     [nocompile] static void onBoundsChanged();
434
435     // Fired when the window is closed. Note, this should be listened to from
436     // a window other than the window being closed, for example from the
437     // background page. This is because the window being closed will be in the
438     // process of being torn down when the event is fired, which means not all
439     // APIs in the window's script context will be functional.
440     [nocompile] static void onClosed();
441
442     // Fired when the window is fullscreened.
443     [nocompile] static void onFullscreened();
444
445     // Fired when the window is maximized.
446     [nocompile] static void onMaximized();
447
448     // Fired when the window is minimized.
449     [nocompile] static void onMinimized();
450
451     // Fired when the window is restored from being minimized or maximized.
452     [nocompile] static void onRestored();
453
454     // Fired when the window's ability to use alpha transparency changes.
455     [nocompile, nodoc] static void onAlphaEnabledChanged();
456
457     // Event for testing. Lets tests wait until a window has been shown.
458     [nocompile, nodoc] static void onWindowFirstShown();
459   };
460 };