Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: chrome/browser/resources/file_manager/foreground/js/cws_container_client.js

Issue 247123002: Move Files.app files to ui/file_manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix the test failure on non-chromeos Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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.
4
5 'use strict';
6
7 /**
8 * @param {WebView} webView Web View tag.
9 * @param {?string} ext File extension.
10 * @param {?string} mime File mime type.
11 * @param {?string} searchQuery Search query.
12 * @param {number} width Width of the CWS widget.
13 * @param {number} height Height of the CWS widget.
14 * @param {string} url Share Url for an entry.
15 * @param {string} target Target (scheme + host + port) of the widget.
16 * @constructor
17 */
18 function CWSContainerClient(
19 webView, ext, mime, searchQuery, width, height, url, target) {
20 this.webView_ = webView;
21 this.ext_ = (ext && ext[0] == '.') ? ext.substr(1) : ext;
22 this.mime_ = mime;
23 this.searchQuery_ = searchQuery;
24 this.width_ = width;
25 this.height_ = height;
26 this.url_ = url;
27 this.target_ = target;
28
29 this.loaded_ = false;
30 this.loading_ = false;
31
32 this.onMessageBound_ = this.onMessage_.bind(this);
33 this.onLoadStopBound_ = this.onLoadStop_.bind(this);
34 this.onLoadAbortBound_ = this.onLoadAbort_.bind(this);
35 }
36
37 CWSContainerClient.prototype = {
38 __proto__: cr.EventTarget.prototype
39 };
40
41 /**
42 * Events CWSContainerClient fires
43 *
44 * @enum {string}
45 * @const
46 */
47 CWSContainerClient.Events = {
48 LOADED: 'CWSContainerClient.Events.LOADED',
49 LOAD_FAILED: 'CWSContainerClient.Events.LOAD_FAILED',
50 REQUEST_INSTALL: 'CWSContainerClient.Events.REQUEST_INSTALL'
51 };
52 Object.freeze(CWSContainerClient.Events);
53
54 /**
55 * Handles messages from the widget
56 * @param {Event} event Message event.
57 * @private
58 */
59 CWSContainerClient.prototype.onMessage_ = function(event) {
60 if (event.origin != this.target_)
61 return;
62
63 var data = event.data;
64 switch (data['message']) {
65 case 'widget_loaded':
66 this.onWidgetLoaded_();
67 break;
68 case 'widget_load_failed':
69 this.onWidgetLoadFailed_();
70 break;
71 case 'before_install':
72 this.sendInstallRequest_(data['item_id']);
73 break;
74 default:
75 console.error('Unexpected message: ' + data['message'], data);
76 }
77 };
78
79 /**
80 * Called when receiving 'loadstop' event from the <webview>.
81 * @param {Event} event Message event.
82 * @private
83 */
84 CWSContainerClient.prototype.onLoadStop_ = function(event) {
85 if (this.url_ == this.webView_.src && !this.loaded_) {
86 this.loaded_ = true;
87 this.postInitializeMessage_();
88 }
89 };
90
91 /**
92 * Called when the widget is loaded successfully.
93 * @private
94 */
95 CWSContainerClient.prototype.onWidgetLoaded_ = function() {
96 cr.dispatchSimpleEvent(this, CWSContainerClient.Events.LOADED);
97 };
98
99 /**
100 * Called when the widget is failed to load.
101 * @private
102 */
103 CWSContainerClient.prototype.onWidgetLoadFailed_ = function() {
104 this.sendWidgetLoadFailed_();
105 };
106
107 /**
108 * Called when receiving the 'loadabort' event from <webview>.
109 * @param {Event} event Message event.
110 * @private
111 */
112 CWSContainerClient.prototype.onLoadAbort_ = function(event) {
113 this.sendWidgetLoadFailed_();
114 };
115
116 /**
117 * Called when the installation is completed from the suggest-app dialog.
118 *
119 * @param {boolean} result True if the installation is success, false if failed.
120 * @param {string} itemId Item id to be installed.
121 */
122 CWSContainerClient.prototype.onInstallCompleted = function(result, itemId) {
123 if (result)
124 this.postInstallSuccessMessage_(itemId);
125 else
126 this.postInstallFailureMessage_(itemId);
127 };
128
129 /**
130 * Send the fail message to the suggest-app dialog.
131 * @private
132 */
133 CWSContainerClient.prototype.sendWidgetLoadFailed_ = function() {
134 cr.dispatchSimpleEvent(this, CWSContainerClient.Events.LOAD_FAILED);
135 };
136
137 /**
138 * Send the install request to the suggest-app dialog.
139 *
140 * @param {string} itemId Item id to be installed.
141 * @private
142 */
143 CWSContainerClient.prototype.sendInstallRequest_ = function(itemId) {
144 var event = new Event(CWSContainerClient.Events.REQUEST_INSTALL);
145 event.itemId = itemId;
146 this.dispatchEvent(event);
147 };
148
149 /**
150 * Send the 'install_failure' message to the widget.
151 *
152 * @param {string} itemId Item id to be installed.
153 * @private
154 */
155 CWSContainerClient.prototype.postInstallFailureMessage_ = function(itemId) {
156 var message = {
157 message: 'install_failure',
158 item_id: itemId,
159 v: 1
160 };
161
162 this.postMessage_(message);
163 };
164
165 /**
166 * Send the 'install_success' message to the widget.
167 *
168 * @param {string} itemId Item id to be installed.
169 * @private
170 */
171 CWSContainerClient.prototype.postInstallSuccessMessage_ = function(itemId) {
172 var message = {
173 message: 'install_success',
174 item_id: itemId,
175 v: 1
176 };
177
178 this.postMessage_(message);
179 };
180
181 /**
182 * Send the 'initialize' message to the widget.
183 * @private
184 */
185 CWSContainerClient.prototype.postInitializeMessage_ = function() {
186 var message = {
187 message: 'initialize',
188 hl: util.getCurrentLocaleOrDefault(),
189 width: this.width_,
190 height: this.height_,
191 v: 1
192 };
193
194 if (this.searchQuery_) {
195 message['search_query'] = this.searchQuery_;
196 } else {
197 message['file_extension'] = this.ext_;
198 message['mime_type'] = this.mime_;
199 }
200
201 this.postMessage_(message);
202 };
203
204 /**
205 * Send a message to the widget. This method shouldn't be called directly,
206 * should from more specified posting function (eg. postXyzMessage_()).
207 *
208 * @param {object} message Message object to be posted.
209 * @private
210 */
211 CWSContainerClient.prototype.postMessage_ = function(message) {
212 if (!this.webView_.contentWindow)
213 return;
214
215 this.webView_.contentWindow.postMessage(message, this.target_);
216 };
217
218 /**
219 * Loads the page to <webview>. Can be called only once.
220 */
221 CWSContainerClient.prototype.load = function() {
222 if (this.loading_ || this.loaded_)
223 throw new Error('Already loaded.');
224 this.loading_ = true;
225 this.loaded_ = false;
226
227 window.addEventListener('message', this.onMessageBound_);
228 this.webView_.addEventListener('loadstop', this.onLoadStopBound_);
229 this.webView_.addEventListener('loadabort', this.onLoadAbortBound_);
230 this.webView_.setAttribute('src', this.url_);
231 };
232
233 /**
234 * Aborts loading of the embedded dialog and performs cleanup.
235 */
236 CWSContainerClient.prototype.abort = function() {
237 window.removeEventListener('message', this.onMessageBound_);
238 this.webView_.removeEventListener('loadstop', this.onLoadStopBound_);
239 this.webView_.removeEventListener(
240 'loadabort', this.onLoadAbortBound_);
241 this.webView_.stop();
242 };
243
244 /**
245 * Cleans the dialog by removing all handlers.
246 */
247 CWSContainerClient.prototype.dispose = function() {
248 this.abort();
249 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698