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.
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/samples/window-state">
9 // Window State Sample</a> for a demonstration of these options.
10 namespace app.window
{
12 // Previously named Bounds.
13 dictionary ContentBounds
{
20 dictionary BoundsSpecification
{
21 // The X coordinate of the content or window.
24 // The Y coordinate of the content or window.
27 // The width of the content or window.
30 // The height of the content or window.
33 // The minimum width of the content or window.
36 // The minimum height of the content or window.
39 // The maximum width of the content or window.
42 // The maximum height of the content or window.
47 // This property can be used to read or write the current X coordinate of
48 // the content or window.
51 // This property can be used to read or write the current Y coordinate of
52 // the content or window.
55 // This property can be used to read or write the current width of the
59 // This property can be used to read or write the current height of the
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
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
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
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
83 // Set the left and top position of the content or window.
84 static
void setPosition
(long left
, long top
);
86 // Set the width and height of the content or window.
87 static
void setSize
(long width
, long height
);
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
);
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
);
100 dictionary FrameOptions
{
101 // Frame type: <code>none</code> or <code>chrome</code> (defaults to
102 // <code>chrome</code>).
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.
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
111 // Allows the frame color to be set. Frame coloring is only available if the
112 // frame type is <code>chrome</code>.
114 // Frame coloring is new in Chrome 36.
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>.
119 // Frame coloring is only available if the frame type is
120 // <code>chrome</code>.
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>.
128 // <code>inactiveColor</code> must be used in conjunction with <code>
131 // Frame coloring is new in Chrome 36.
132 DOMString? inactiveColor
;
135 // State of a window: normal, fullscreen, maximized, minimized.
136 enum State
{ normal
, fullscreen
, maximized
, minimized
};
138 // 'shell' is the default window type. 'panel' is managed by the OS
139 // (Currently experimental, Ash only).
140 [nodoc
] enum WindowType
{ shell
, panel
};
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.
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
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
162 // This property is new in Chrome 36.
163 BoundsSpecification? innerBounds
;
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
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
176 // This property is new in Chrome 36.
177 BoundsSpecification? outerBounds
;
179 // Default width of the window.
180 [nodoc
, deprecated
="Use $(ref:BoundsSpecification)."] long? defaultWidth
;
182 // Default height of the window.
183 [nodoc
, deprecated
="Use $(ref:BoundsSpecification)."] long? defaultHeight
;
185 // Default X coordinate of the window.
186 [nodoc
, deprecated
="Use $(ref:BoundsSpecification)."] long? defaultLeft
;
188 // Default Y coordinate of the window.
189 [nodoc
, deprecated
="Use $(ref:BoundsSpecification)."] long? defaultTop
;
191 // Width of the window.
192 [nodoc
, deprecated
="Use $(ref:BoundsSpecification)."] long? width
;
194 // Height of the window.
195 [nodoc
, deprecated
="Use $(ref:BoundsSpecification)."] long? height
;
197 // X coordinate of the window.
198 [nodoc
, deprecated
="Use $(ref:BoundsSpecification)."] long? left
;
200 // Y coordinate of the window.
201 [nodoc
, deprecated
="Use $(ref:BoundsSpecification)."] long? top
;
203 // Minimum width of the window.
204 [deprecated
="Use innerBounds or outerBounds."] long? minWidth
;
206 // Minimum height of the window.
207 [deprecated
="Use innerBounds or outerBounds."] long? minHeight
;
209 // Maximum width of the window.
210 [deprecated
="Use innerBounds or outerBounds."] long? maxWidth
;
212 // Maximum height of the window.
213 [deprecated
="Use innerBounds or outerBounds."] long? maxHeight
;
215 // Type of window to create.
216 [nodoc
] WindowType? type
;
218 // Creates a special ime window. This window is not focusable and can be
219 // stacked above virtual keyboard window. This is restriced to component ime
221 // Requires the <code>app.window.ime</code> API permission.
222 [nodoc
] boolean? ime
;
224 // Frame type: <code>none</code> or <code>chrome</code> (defaults to
225 // <code>chrome</code>). For <code>none</code>, the
226 // <code>-webkit-app-region</code> CSS property can be used to apply
227 // draggability to the app's window. <code>-webkit-app-region: drag</code>
228 // can be used to mark regions draggable. <code>no-drag</code> can be used
229 // to disable this style on nested elements.
231 // Use of <code>FrameOptions</code> is new in M36.
232 (DOMString or FrameOptions
)? frame
;
234 // Size and position of the content in the window (excluding the titlebar).
235 // If an id is also specified and a window with a matching id has been shown
236 // before, the remembered bounds of the window will be used instead.
237 [deprecated
="Use innerBounds or outerBounds."] ContentBounds? bounds
;
239 // Enable window background transparency.
240 // Only supported in ash. Requires the <code>app.window.alpha</code> API
242 [nodoc
] boolean? alphaEnabled
;
244 // The initial state of the window, allowing it to be created already
245 // fullscreen, maximized, or minimized. Defaults to 'normal'.
248 // If true, the window will be created in a hidden state. Call show() on
249 // the window to show it once it has been created. Defaults to false.
252 // If true, the window will be resizable by the user. Defaults to true.
255 // By default if you specify an id for the window, the window will only be
256 // created if another window with the same id doesn't already exist. If a
257 // window with the same id already exists that window is activated instead.
258 // If you do want to create multiple windows with the same id, you can
259 // set this property to false.
260 [deprecated
="Multiple windows with the same id is no longer supported."] boolean? singleton
;
262 // If true, the window will stay above most other windows. If there are
263 // multiple windows of this kind, the currently focused window will be in
264 // the foreground. Requires the <code>alwaysOnTopWindows</code>
265 // permission. Defaults to false.
267 // Call <code>setAlwaysOnTop()</code> on the window to change this property
269 boolean? alwaysOnTop
;
271 // If true, the window will be focused when created. Defaults to true.
274 // If true, and supported by the platform, the window will be visible on all
276 boolean? visibleOnAllWorkspaces
;
279 // Called in the creating window (parent) before the load event is called in
280 // the created window (child). The parent can set fields or functions on the
281 // child usable from onload. E.g. background.js:
283 // <code>function(createdWindow) { createdWindow.contentWindow.foo =
284 // function () { }; };</code>
288 // <code>window.onload = function () { foo(); }</code>
289 callback CreateWindowCallback
=
290 void ([instanceOf
=AppWindow
] object createdWindow
);
292 [noinline_doc
] dictionary AppWindow
{
296 // Fullscreens the window.
298 // The user will be able to restore the window by pressing ESC. An
299 // application can prevent the fullscreen state to be left when ESC is
300 // pressed by requesting the <code>app.window.fullscreen.overrideEsc</code>
301 // permission and canceling the event by calling .preventDefault(), in the
302 // keydown and keyup handlers, like this:
304 // <code>window.onkeydown = window.onkeyup = function(e) { if (e.keyCode ==
305 // 27 /* ESC */) { e.preventDefault(); } };</code>
307 // Note <code>window.fullscreen()</code> will cause the entire window to
308 // become fullscreen and does not require a user gesture. The HTML5
309 // fullscreen API can also be used to enter fullscreen mode (see
310 // <a href="http://developer.chrome.com/apps/api_other.html">Web APIs</a>
311 // for more details).
312 static
void fullscreen
();
314 // Is the window fullscreen? This will be true if the window has been
315 // created fullscreen or was made fullscreen via the
316 // <code>AppWindow</code> or HTML5 fullscreen APIs.
317 static
boolean isFullscreen
();
319 // Minimize the window.
320 static
void minimize
();
322 // Is the window minimized?
323 static
boolean isMinimized
();
325 // Maximize the window.
326 static
void maximize
();
328 // Is the window maximized?
329 static
boolean isMaximized
();
331 // Restore the window, exiting a maximized, minimized, or fullscreen state.
332 static
void restore
();
334 // Move the window to the position (|left|, |top|).
335 [deprecated
="Use outerBounds."] static
void moveTo
(long left
, long top
);
337 // Resize the window to |width|x|height| pixels in size.
338 [deprecated
="Use outerBounds."] static
void resizeTo
(long width
, long height
);
340 // Draw attention to the window.
341 static
void drawAttention
();
343 // Clear attention to the window.
344 static
void clearAttention
();
349 // Show the window. Does nothing if the window is already visible.
350 // Focus the window if |focused| is set to true or omitted.
351 static
void show
(optional boolean focused
);
353 // Hide the window. Does nothing if the window is already hidden.
356 // Get the window's inner bounds as a $(ref:ContentBounds) object.
357 [nocompile
, deprecated
="Use innerBounds or outerBounds."] static ContentBounds getBounds
();
359 // Set the window's inner bounds.
360 [nocompile
, deprecated
="Use innerBounds or outerBounds."] static
void setBounds
(ContentBounds bounds
);
362 // Set the app icon for the window (experimental).
363 // Currently this is only being implemented on Ash.
364 // TODO(stevenjb): Investigate implementing this on Windows and OSX.
365 [nodoc
] static
void setIcon
(DOMString iconUrl
);
367 // Is the window always on top?
368 static
boolean isAlwaysOnTop
();
370 // Accessors for testing.
371 [nodoc
] boolean hasFrameColor
;
372 [nodoc
] long activeFrameColor
;
373 [nodoc
] long inactiveFrameColor
;
374 [nodoc
] boolean? firstShowHasHappened
;
376 // Set whether the window should stay above most other windows. Requires the
377 // <code>alwaysOnTopWindows</code> permission.
378 static
void setAlwaysOnTop
(boolean alwaysOnTop
);
380 // Can the window use alpha transparency?
381 // TODO(jackhou): Document this properly before going to stable.
382 [nodoc
] static
boolean alphaEnabled
();
384 // Set whether the window is visible on all workspaces. (Only for platforms
385 // that support this).
386 static
void setVisibleOnAllWorkspaces
(boolean alwaysVisible
);
388 // Set whether the window should get all keyboard events including system
389 // keys that are usually not sent. This is best-effort subject to platform
390 // specific constraints. Requires the <code>"app.window.allKeys"</code>
391 // permission. This is currently available only in dev channel on Windows.
392 static
void setInterceptAllKeys
(boolean wantAllKeys
);
394 // The JavaScript 'window' object for the created child.
395 [instanceOf
=Window
] object contentWindow
;
397 // The id the window was created with.
400 // The position, size and constraints of the window's content, which does
401 // not include window decorations.
402 // This property is new in Chrome 36.
405 // The position, size and constraints of the window, which includes window
406 // decorations, such as the title bar and frame.
407 // This property is new in Chrome 36.
411 interface Functions
{
412 // The size and position of a window can be specified in a number of
413 // different ways. The most simple option is not specifying anything at
414 // all, in which case a default size and platform dependent position will
417 // To set the position, size and constraints of the window, use the
418 // <code>innerBounds</code> or <code>outerBounds</code> properties. Inner
419 // bounds do not include window decorations. Outer bounds include the
420 // window's title bar and frame. Note that the padding between the inner and
421 // outer bounds is determined by the OS. Therefore setting the same property
422 // for both inner and outer bounds is considered an error (for example,
423 // setting both <code>innerBounds.left</code> and
424 // <code>outerBounds.left</code>).
426 // To automatically remember the positions of windows you can give them ids.
427 // If a window has an id, This id is used to remember the size and position
428 // of the window whenever it is moved or resized. This size and position is
429 // then used instead of the specified bounds on subsequent opening of a
430 // window with the same id. If you need to open a window with an id at a
431 // location other than the remembered default, you can create it hidden,
432 // move it to the desired location, then show it.
433 static
void create
(DOMString url
,
434 optional CreateWindowOptions options
,
435 optional CreateWindowCallback
callback);
437 // Returns an $(ref:AppWindow) object for the
438 // current script context (ie JavaScript 'window' object). This can also be
439 // called on a handle to a script context for another page, for example:
440 // otherWindow.chrome.app.window.current().
441 [nocompile
] static AppWindow current
();
442 [nocompile
, nodoc
] static
void initializeAppWindow
(object state
);
444 // Gets an array of all currently created app windows. This method is new in
446 [nocompile
] static AppWindow
[] getAll
();
448 // Gets an $(ref:AppWindow) with the given id. If no window with the given id
449 // exists null is returned. This method is new in Chrome 33.
450 [nocompile
] static AppWindow get
(DOMString
id);
452 // Whether the current platform supports windows being visible on all
454 [nocompile
] static
boolean canSetVisibleOnAllWorkspaces
();
458 // Fired when the window is resized.
459 [nocompile
] static
void onBoundsChanged
();
461 // Fired when the window is closed. Note, this should be listened to from
462 // a window other than the window being closed, for example from the
463 // background page. This is because the window being closed will be in the
464 // process of being torn down when the event is fired, which means not all
465 // APIs in the window's script context will be functional.
466 [nocompile
] static
void onClosed
();
468 // Fired when the window is fullscreened (either via the
469 // <code>AppWindow</code> or HTML5 APIs).
470 [nocompile
] static
void onFullscreened
();
472 // Fired when the window is maximized.
473 [nocompile
] static
void onMaximized
();
475 // Fired when the window is minimized.
476 [nocompile
] static
void onMinimized
();
478 // Fired when the window is restored from being minimized or maximized.
479 [nocompile
] static
void onRestored
();
481 // Fired when the window's ability to use alpha transparency changes.
482 [nocompile
, nodoc
] static
void onAlphaEnabledChanged
();
484 // Event for testing. Lets tests wait until a window has been shown.
485 [nocompile
, nodoc
] static
void onWindowFirstShown
();