Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / chrome / test / data / chromeos / file_manager / share_dialog_mock / main.js
blob4057547fdb19d7c051e7f6e5109fbed43ea33036
1 // Copyright 2013 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 // Namespace for the share dialog mock.
6 var shareDialog = {};
8 /**
9  * Origin of Files.app.
10  * @type {string}
11  * @const
12  */
13 shareDialog.EMBEDDER_ORIGIN =
14     'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj';
16 /**
17  * Target width of the sharing window in pixels.
18  * @type {number}
19  * @const
20  */
21 shareDialog.TARGET_WIDTH = 350;
23 /**
24  * Target height of the sharing window in pixels.
25  * @type {number}
26  * @const
27  */
28 shareDialog.TARGET_HEIGHT = 250;
30 /**
31  * Target window of Files.app. Used to communicate over messages. Filled out
32  * once the first message from the embedder arrives.
33  * @type {Window}
34  */
35 shareDialog.embedderTarget = null;
37 /**
38  * List of pending messages enqueued to be sent before establishing the target.
39  * @type {Array<Object>}
40  */
41 shareDialog.pendingMessages = [];
43 /**
44  * Sends a message to the embedder. If the embedder target is not available,
45  * then enqueues them. Such enqueued messages will be sent as soon as the target
46  * is available.
47  *
48  * @param {string} type Message identifier
49  * @param {Object=} opt_args Arguments for the message.
50  * @private
51  */
52 shareDialog.sendMessage_ = function(type, opt_args) {
53   if (!shareDialog.embedderTarget) {
54     shareDialog.pendingMessages.push({type: type, args: opt_args});
55     return;
56   }
58   var data = {};
59   data.type = type;
60   if (opt_args)
61     data.args = opt_args;
63   shareDialog.embedderTarget.postMessage(JSON.stringify(data),
64                                          shareDialog.EMBEDDER_ORIGIN);
67 /**
68  * Handles a request from the embedder to make the body visible.
69  * @private
70  */
71 shareDialog.onMakeBodyVisible_ = function() {
72   document.body.style.display = '';
75 /**
76  * Handles an event from the embedder than preparation to show the contents
77  * is done.
78  * @private
79  */
80 shareDialog.onPrepareComplete_ = function() {
81   shareDialog.resize();
84 /**
85  * Handles an event from the embedder than preparation resize the window is
86  * done.
87  * @private
88  */
89 shareDialog.onResizeComplete_ = function() {
90   var container = document.querySelector('#container');
91   container.style.width = shareDialog.TARGET_WIDTH + 'px';
92   container.style.height = shareDialog.TARGET_HEIGHT + 'px';
95 /**
96  * Changes the visibility of the dialog.
97  * @param {boolean} visible True to set the dialog visible, false to set it
98  *     invisible.
99  */
100 shareDialog.setVisible = function(visible) {
101   shareDialog.sendMessage_('setVisible', {visible: visible});
105  * Prepares the embedder to make the contents visible.
106  */
107 shareDialog.prepareForVisible = function() {
108   shareDialog.sendMessage_('prepareForVisible');
112  * Resizes the embedder to the content window dimensions.
113  */
114 shareDialog.resize = function() {
115   shareDialog.sendMessage_('prepareForResize');
119  * Handles messages sent by the embedder. If it is the first message, then
120  * the target is established and all enqueued messages to be sent to the
121  * embedder are sent before handling the message from the embedder.
123  * @param {Event} message Message event.
124  * @private
125  */
126 shareDialog.onMessage_ = function(message) {
127   if (message.origin != shareDialog.EMBEDDER_ORIGIN)
128     return;
130   if (!shareDialog.embedderTarget) {
131     shareDialog.embedderTarget = message.source;
132     for (var i = 0; i < shareDialog.pendingMessages.length; i++) {
133       shareDialog.sendMessage_(shareDialog.pendingMessages[i].type,
134                                shareDialog.pendingMessages[i].args);
135     }
136     shareDialog.pendingMessages = [];
137   }
139   var packet = JSON.parse(message.data)
140   var type = packet.type;
141   var args = packet.args;
143   switch (type) {
144     case 'makeBodyVisible':
145       shareDialog.onMakeBodyVisible_(args);
146       break;
147     case 'prepareComplete':
148       shareDialog.onPrepareComplete_(args);
149       break;
150     case 'resizeComplete':
151       shareDialog.onResizeComplete_(args);
152       break;
153   }
157  * Initializes the mocked share dialog.
158  */
159 shareDialog.initialize = function() {
160   window.addEventListener('message', shareDialog.onMessage_);
161   shareDialog.prepareForVisible();
164 window.addEventListener('load', shareDialog.initialize);